服務端返回錯誤碼命令字符串(如 "5 FAIL 1\n"),需快速判斷是否為已知失敗響應。利用枚舉遍歷構建標準命令映射表(Hashtable),實現 O(1) 查找。
using System;
using System.Collections;
namespace ConsoleApplication2
{
public enum CMD_ERROR_TYPE
{
PARSE_ERROR = 1, // 解析出錯
BAD_CMD // 錯誤命令(自動遞增為 2)
}
class Program
{
static void Main(string[] args)
{
string cmd = "5 FAIL 1\n";
bool isFail = IsServRespFailCMD(cmd);
Console.WriteLine(isFail ? "已知失敗命令" : "未知命令");
Console.ReadLine();
}
public static bool IsServRespFailCMD(string rcvedCMD)
{
Hashtable htFileCmd = new Hashtable();
// 遍歷枚舉所有值,構建標準命令字符串 -> 錯誤碼映射
foreach (int e in Enum.GetValues(typeof(CMD_ERROR_TYPE)))
{
string stdFileCmd = string.Format("5 FAIL {0}\n", e);
htFileCmd.Add(stdFileCmd, e);
}
return htFileCmd.ContainsKey(rcvedCMD);
}
}
}
foreach 遍歷。ContainsKey 平均 O(1) 判斷命令是否在已知失敗集合中。BAD_CMD 無賦值則自動為前一值 +1(即 2),便於擴展。// 使用泛型 Dictionary 替代 Hashtable,類型安全
var cmdMap = Enum.GetValues(typeof(CMD_ERROR_TYPE))
.Cast<CMD_ERROR_TYPE>()
.ToDictionary(e => string.Format("5 FAIL {0}\n", (int)e), e => e);
return cmdMap.ContainsKey(rcvedCMD);
foreach (CMD_ERROR_TYPE e in Enum.GetValues(typeof(CMD_ERROR_TYPE))) {
Console.WriteLine($"Name: {e}, Value: {(int)e}");
// 若掛 DescriptionAttribute 可通過反射獲取中文描述
}