首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 列舉型別深度解析:中文命名、重複值、預設遞增與遍歷技巧

     編輯:關於C語言

前言:一個真實的 Bug 案例

專案中同事定義列舉,我依列舉值撰寫判斷邏輯,卻因 C# 列舉特性(自動遞增、值可重複)導致邏輯錯誤。本文透過實測代碼完整驗證列舉行為。

特性 1:列舉成員可使用中文命名

public enum Weekdays 
{
    星期一, 
    星期二, 
    星期三, 
    星期四, 
    星期五 
}

✅ 合法。但同一列舉內成員名稱不可重複:

public enum Letter 
{
    A, 
    A,  // 編譯錯誤:類型 'Letter' 已包含 'A' 的定義
    C 
}

特性 2:列舉值可以相同

public enum Letter 
{
    A = 1,
    a = 1,  // 不同名稱可共用同一值
    B = 2,
    b = 2,
    C,      // 自動遞增為 3
    D,      // 4
    E       // 5
}

⚠️ 此特性常用於別名設計,但比較時需注意 Letter.A == Letter.a 為 true。

特性 3:預設值遞增規則

未指定值時,第一個成員為 0,後續依序 +1。若中間指定值,後續繼續遞增:

public enum Letter 
{
    A,      // 0
    B,      // 1
    C = -3, // -3
    D,      // -2
    E       // -1
}

特性 4:列舉遍歷技巧

Array letterArray = Enum.GetValues(typeof(Letter));
foreach (Letter item in letterArray)
{
    Console.Write($"{item} = {(int)item}, ");
}
// 輸出:A = 0, B = 1, C = -3, D = -2, E = -1,

也可用 Enum.GetNames 僅取得名稱陣列,或 Enum.IsDefined 驗證值是否存在。

實務建議

  • 明確指定關鍵成員值,避免插入新成員導致後續值位移
  • 旗標型列舉使用 [Flags] 屬性並設定 2 的冪次值
  • 序列化時考慮使用字串而非數值,提升版本相容性

原文參考

原文:C#中的枚舉值

相關推薦

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved