C# 語言參考
enum (C# 參考)

enum 關鍵字用來宣告列舉型別 (Enumeration),是由一組名為列舉值清單的具名常數所構成的獨特型別。每個列舉型別都有基礎型別,此基礎型別可以是除了 char 型別以外的任何整數型別。列舉項目的預設基礎型別是 int。根據預設,第一個列舉值的值是 0,而每一個接下來的列舉值會遞增 1。例如:

      enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

在這個列舉型別裡,Sat0Sun1Mon2,等等。列舉值可以有初始設定式來覆寫預設值。例如:

      enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

在這個列舉型別裡,項目的順序會強迫從 1 開始而不是 0

可將基礎型別範圍內的任何值指派給 Days 型別的變數;這些值並不受限於具名常數。

enum E 的預設值是由運算式 (E)0 產生。

Note注意事項

列舉值的名稱中可能不包含空格。

目前型別會為每個列舉值指定配置的儲存區。然而,將 enum 型別轉換成整數型別需要明確的型別轉換。例如,下列陳述式將列舉值 Sun 指派為 int 型別的變數,使用型別轉換將 enum 轉換成 int

int x = (int)Days.Sun;

套用 System.FlagsAttribute 的列舉值如果包含某些結合了位元 OR 運算的項目,您會注意到在使用某些工具時,屬性 (Attribute) 會影響 enum 的行為。使用例如 Console 類別方法、運算式評估工具等工具時,會注意到這些變更 (請參閱範例 3)。

穩固程式設計

不論是指派其他值做為新版本的列舉,或是變更新版本之列舉成員的值,都可能造成相依的原始程式碼發生問題。常見的情況是,enum 值用於 switch 陳述式中,而且如果其他項目又加入至 enum 型別,則預設值的測試將會傳回非預期的 true。

如果有其他開發人員將使用您的程式碼,請務必同時提供方針,說明當任何 enum 型別中加入新項目時,他們的程式碼應該要如何回應。

範例

在這個範例裡,宣告了一個 Days 列舉型別。兩個列舉值會明確轉換成整數,然後指派給整數變數。

// keyword_enum.cs
// enum initialization:
using System;
public class EnumTest 
{
    enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

    static void Main() 
    {
        int x = (int)Days.Sun;
        int y = (int)Days.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}

輸出

Sun = 2
Fri = 7

在這個範例中,使用基底型別選項來宣告 enum,其成員為 long 型別。請注意,即使列舉型別的基礎型別是 long,列舉型別成員仍應利用轉型 (Cast) 明確轉換成 long 型別。

// keyword_enum2.cs
// Using long enumerators
using System;
public class EnumTest 
{
    enum Range :long {Max = 2147483648L, Min = 255L};
    static void Main() 
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine("Max = {0}", x);
        Console.WriteLine("Min = {0}", y);
    }
}

輸出

Max = 2147483648
Min = 255

下列程式碼範例將示範如何使用 enum 宣告的 System.FlagsAttribute 屬性及效果。

// enumFlags.cs
// Using the FlagsAttribute on enumerations.
using System;

[Flags]
public enum CarOptions
{
    SunRoof = 0x01,
    Spoiler = 0x02,
    FogLights = 0x04,
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
        Console.WriteLine(options);
        Console.WriteLine((int)options);
    }
}

輸出

SunRoof, FogLights
5
註解

請注意如果您將 Sat=1 的初始設定式移除,結果會是:

Sun = 1
Fri = 6
註解

請注意,如果移除了 FlagsAttribute,則範例將輸出以下內容:

5

5

C# 語言規格

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

  • 1.10 列舉

  • 6.2.2 明確列舉轉換

  • 14 列舉

請參閱

工作

屬性範例

參考

C# 關鍵字
整數類資料型別表 (C# 參考)
內建型別資料表 (C# 參考)
隱含數值轉換表 (C# 參考)
明確數值轉換表 (C# 參考)

概念

C# 程式設計手冊
列舉型別設計

其他資源

C# 參考

Page view tracker