枚舉 是一組具名整數常數的集合,用於表示有限、固定的選項集合,如季節、星期、狀態碼等。它能提高程式碼可讀性、提供型別安全,並便於除錯時顯示有意義的名稱而非魔術數字。
[modifiers] enum EnumName
{
Member1,
Member2,
// ...
MemberN
}
public enum TechnologyDirection
{
CppDeveloper, // C++ 程式設計師
JavaDeveloper, // Java 程式設計師
DotNetDeveloper, // .NET 程式設計師
Architect, // 架構師
TeamLead, // 開發組長
Analyst // 需求分析師
}
預設底層型別為 int,成員從 0 起始自動遞增。可顯式指定數值:
public enum Season
{
Spring = 0,
Summer = 1,
Autumn = 2,
Winter = 3
}
// 也可不連續、甚至重複
public enum Priority
{
Low = 1,
Medium = 5,
High = 10,
Critical = 10 // 允許相同值
}
// 取得名稱
string name = Season.Autumn.ToString(); // "Autumn"
// 取得數值
int value = (int)Season.Autumn; // 2
// 字串轉枚舉
Season s = Enum.Parse<Season>("Spring"); // 建議用 TryParse
// 列舉所有成員
foreach (var s in Enum.GetValues(typeof(Season)))
Console.WriteLine($"{s} = {(int)s}");
// 判斷是否定義
bool exists = Enum.IsDefined(typeof(Season), "Summer"); // true
加上 [Flags] 屬性,配合 2 的冪次數值,可進行位元運算:
[Flags]
public enum FileAccess
{
None = 0,
Read = 1, // 0b0001
Write = 2, // 0b0010
Execute = 4, // 0b0100
ReadWrite = Read | Write // 3
}
var access = FileAccess.Read | FileAccess.Write;
bool canWrite = access.HasFlag(FileAccess.Write); // true
int,除非記憶體極度敏感才改用 byte/short。Color.Red 而非 Colors.Red)。