在 C# 程式設計中,枚舉類型(Enum)提供了一種優雅的方式來定義一組具名的整數常數。當你需要讓變數只能接受有限的幾個特定值時,枚舉是最佳選擇。例如表示一週七天、十二個月份、狀態碼等場景。
使用 enum 關鍵字即可聲明枚舉。預設情況下,枚舉成員的基礎類型為 int,且從 0 開始自動遞增:
enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
也可透過冒號指定其他整數類型(如 byte、short 等)以節省記憶體:
enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }
枚舉成員可透過強制轉換取得其底層數值:
Days today = Days.Monday;
int dayNumber = (int)today; // 結果為 1
Console.WriteLine($"{today} is day number #{dayNumber}.");
注意:若未顯式指派值,第一個成員預設為 0。建議將最合理的預設值設為 0,確保未初始化的枚舉變數擁有合理的預設行為。
枚舉成員可指定任意整數值,甚至使用運算式:
enum MachineState
{
PowerOff = 0,
Running = 5,
Sleeping = 10,
Hibernating = Sleeping + 5 // 等於 15
}
若需讓枚舉變數儲存多個值的組合,可套用 [Flags] 屬性,並將成員值設為 2 的冪次方:
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
使用位元運算子進行組合操作:
meetingDays = Days2.Tuesday | Days2.Thursday;meetingDays |= Days2.Friday;meetingDays ^= Days2.Tuesday;bool hasThursday = (meetingDays & Days2.Thursday) == Days2.Thursday;所有枚舉皆繼承自 System.Enum,提供豐富的靜態方法:
Enum.GetName(typeof(Days), 4) → 取得數值對應的名稱Enum.GetValues(typeof(Days)) → 取得所有數值Enum.GetNames(typeof(Days)) → 取得所有名稱Enum.Parse / Enum.TryParse → 字串轉枚舉Enum.IsDefined → 檢查值是否存在(Days)42),這違反語義並可能導致邏輯錯誤None = 0 成員Enum.TryParse 而非 Enum.Parse 以避免例外