共用方式為


列舉型別(C# 參考)

列舉型別(或enum型別)是一種由基礎整數型別的一組具名常數所定義的值型別。 若要定義列舉型別,請使用 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使用方法來判斷列舉類型是否包含具有特定關聯值的列舉成員。

對於任何列舉型別,分別有 Boxing 和 unboxing 轉換到 型別和從 System.Enum 類型轉換。

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

另請參閱