(C# 參考) 列舉型別
列舉型別 (或列舉類型) 是由基礎整數數值類型的一組具名常數所定義。 若要定義列舉型別,請使用 enum
關鍵字並指定 列舉成員的名稱:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
根據預設,列舉成員的相關聯常數值的類型 int
為 ;其開頭為零,並在定義文字順序之後增加一個。 您可以將任何其他 整數數值 類型明確指定為列舉型別的基礎型別。 您也可以明確指定相關聯的常數值,如下列範例所示:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
您無法在列舉型別的定義內定義方法。 若要將功能新增至列舉型別,請建立 擴充方法。
列舉型 E
別的預設值是運算式 (E)0
所產生的值,即使零沒有對應的列舉成員也一樣。
您可以使用列舉型別來表示一組互斥值或選項群組合的選擇。 若要表示選擇的組合,請將列舉型別定義為位旗標。
作為位元旗標的列舉類型
如果您想要列舉型別代表選項的組合,請定義這些選擇的列舉成員,讓個別選擇是位欄位。 也就是說,這些列舉成員的關聯值應該是兩個的乘冪。 然後,您可以使用位邏輯運算子 |
,或 &
分別結合選擇或交集選擇的組合。 若要指出列舉型別會宣告位欄位,請將 Flags 屬性套用至它。 如下列範例所示,您也可以在列舉型別的定義中包含一些典型的組合。
[Flags]
public enum Days
{
None = 0b_0000_0000, // 0
Monday = 0b_0000_0001, // 1
Tuesday = 0b_0000_0010, // 2
Wednesday = 0b_0000_0100, // 4
Thursday = 0b_0000_1000, // 8
Friday = 0b_0001_0000, // 16
Saturday = 0b_0010_0000, // 32
Sunday = 0b_0100_0000, // 64
Weekend = Saturday | Sunday
}
public class FlagsEnumExample
{
public static void Main()
{
Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
Console.WriteLine(meetingDays);
// Output:
// Monday, Wednesday, Friday
Days workingFromHomeDays = Days.Thursday | Days.Friday;
Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
// Output:
// Join a meeting by phone on Friday
bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
// Output:
// Is there a meeting on Tuesday: False
var a = (Days)37;
Console.WriteLine(a);
// Output:
// Monday, Wednesday, Saturday
}
}
如需詳細資訊和範例,請參閱 System.FlagsAttribute API 參考頁面和 非獨佔成員和 API 參考頁面的 System.Enum Flags 屬性一節。
System.Enum 類型和列舉條件約束
此 System.Enum 類型是所有列舉型別的抽象基類。 它提供許多方法來取得列舉型別及其值的相關資訊。 如需詳細資訊和範例,請參閱 System.Enum API 參考頁面。
您可以在稱為列舉條件約束的基類條件約束 (中使用 System.Enum
,) 指定類型參數是列舉型別。 任何列舉型別也滿足 struct
條件約束,用來指定類型參數是不可為 Null 的實值型別。
轉換
針對任何列舉類型,列舉型別與其基礎整數類型之間有明確的轉換。 如果您將列舉值 轉換成 其基礎類型,結果就是列舉成員的相關聯整數值。
public enum Season
{
Spring,
Summer,
Autumn,
Winter
}
public class EnumConversionExample
{
public static void Main()
{
Season a = Season.Autumn;
Console.WriteLine($"Integral value of {a} is {(int)a}"); // output: Integral value of Autumn is 2
var b = (Season)1;
Console.WriteLine(b); // output: Summer
var c = (Season)4;
Console.WriteLine(c); // output: 4
}
}
Enum.IsDefined使用 方法來判斷列舉型別是否包含具有特定相關聯值的列舉成員。
針對任何列舉型別,分別有 方塊處理和取消收件匣 轉換到 System.Enum 該類型。
C# 語言規格
如需詳細資訊,請參閱 C# 語言規格的下列幾節: