專案中同事定義列舉,我依列舉值撰寫判斷邏輯,卻因 C# 列舉特性(自動遞增、值可重複)導致邏輯錯誤。本文透過實測代碼完整驗證列舉行為。
public enum Weekdays
{
星期一,
星期二,
星期三,
星期四,
星期五
}
✅ 合法。但同一列舉內成員名稱不可重複:
public enum Letter
{
A,
A, // 編譯錯誤:類型 'Letter' 已包含 'A' 的定義
C
}
public enum Letter
{
A = 1,
a = 1, // 不同名稱可共用同一值
B = 2,
b = 2,
C, // 自動遞增為 3
D, // 4
E // 5
}
⚠️ 此特性常用於別名設計,但比較時需注意 Letter.A == Letter.a 為 true。
未指定值時,第一個成員為 0,後續依序 +1。若中間指定值,後續繼續遞增:
public enum Letter
{
A, // 0
B, // 1
C = -3, // -3
D, // -2
E // -1
}
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#中的枚舉值
