首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

C# 枚舉遍歷實戰:構建命令映射表實現協議解析

     編輯:Java 綜合教學

場景

服務端返回錯誤碼命令字符串(如 "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);
        }
    }
}

核心技術點

  1. Enum.GetValues(Type):獲取枚舉所有常數值的數組,支持 foreach 遍歷。
  2. string.Format:動態生成標準協議字符串,避免硬編碼。
  3. Hashtable 查找:ContainsKey 平均 O(1) 判斷命令是否在已知失敗集合中。
  4. 枚舉自動遞增:BAD_CMD 無賦值則自動為前一值 +1(即 2),便於擴展。

現代寫法建議(.NET 3.5+)

// 使用泛型 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 可通過反射獲取中文描述
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved