enum

C# 程序員參考 
enum(C# 參考) 

enum 關鍵字用於聲明枚舉,即一種由一組稱爲枚舉數列表的命名常數組成的獨特類型。每種枚舉類型都有基礎類型,該類型可以是除 char 以外的任何整型。枚舉元素的默認基礎類型爲 int。默認情況下,第一個枚舉數的值爲 0,後面每個枚舉數的值依次遞增 1。例如:

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

在此枚舉中,Sat 爲 0,Sun 爲 1,Mon 爲 2,依此類推。枚舉數可以具有重寫默認值的初始值設定項。例如:

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

在此枚舉中,強制元素序列從 1 而不是 0 開始。

可以給 Days 類型的變量賦以基礎類型範圍內的任何值,所賦的值不限於已命名的常數。

enum E 的默認值爲表達式 (E)0 產生的值。

注意
枚舉數的名稱中不能包含空白。
 

基礎類型指定爲每個枚舉數分配的存儲大小。但是,從 enum 類型到整型的轉換需要用顯式類型轉換來完成。例如,下面的語句通過使用強制轉換從 enum 轉換爲 int,將枚舉數 Sun 賦給 int 類型的變量:

int x = (int)Days.Sun;

將 System.FlagsAttribute 應用於某個枚舉時,如果該枚舉包含一些使用按位“或”運算組合的元素,這時您會注意到該屬性在用於某些工具時會影響 enum 的行爲。當使用諸如 Console 類方法、表達式計算器這樣的工具時,可以注意到這些變化。(請參見示例 3)。

可靠編程
如果給新版本的枚舉賦其他值,或者更改新版本中枚舉成員的值,可能引起相關源代碼的問題。情況通常是:switch 語句中使用了 enum 值,如果已將其他元素添加到 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
 

在此例中,使用了基類選項來聲明成員類型是 long 的 enum。注意,即使枚舉的基礎類型是 long,枚舉成員仍然必須使用強制轉換顯式轉換爲 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章