列舉可指定任何整數型別 (除 `char`) 作為底層:
enum MyEnum : byte { AA, BB, CC, DD } // 節省記憶體
// 取得名稱與值
string[] names = Enum.GetNames(typeof(MyEnum)); // AA, BB, CC, DD
byte[] values = (byte[])Enum.GetValues(typeof(MyEnum)); // 0, 1, 2, 3
使用 2 的冪次數值 + `[Flags]` 屬性,支援組合:
[Flags]
enum MyEnum
{
AA = 0x0, // 0
BB = 0x1, // 1
CC = 0x2, // 2
DD = 0x4, // 4
EE = 0x8, // 8
FF = 0x10, // 16
GG = 0x20, // 32
HH = 0x40 // 64
}
// 組合與測試
MyEnum flags = MyEnum.CC | MyEnum.DD; // 6
bool hasCC = flags.HasFlag(MyEnum.CC); // true (C# 4+)
bool hasDD = (flags & MyEnum.DD) != 0; // 相容舊版寫法
| 操作 | 程式碼 | 說明 |
|---|---|---|
| 設定旗標 | `flags |= MyEnum.EE` | 加入 EE |
| 清除旗標 | `flags &= ~MyEnum.EE` | 移除 EE |
| 切換旗標 | `flags ^= MyEnum.EE` | 有則移除、無則加入 |
| 檢查旗標 | `flags.HasFlag(MyEnum.EE)` | 建議用法 |
MyEnum e = MyEnum.CC | MyEnum.DD;
Console.WriteLine(e); // "CC, DD" (有 Flags)
Console.WriteLine((int)e); // 6
無 `[Flags]` 時,組合值若非單一定義會顯示數值。