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

C# 枚舉類型完整指南:從基礎聲明到位標誌進階應用

     編輯:關於C語言

什麼是枚舉類型?

在 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 靜態方法

所有枚舉皆繼承自 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 成員
  • 公開 API 中優先使用 Enum.TryParse 而非 Enum.Parse 以避免例外
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved