C#枚舉類型

來源:互聯網
上載者:User

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 = 2Fri = 7

在此例中,使用了基類選項來聲明成員類型是 longenum。注意,即使枚舉的基礎類型是 long,枚舉成員仍然必須使用強制轉換顯式轉換為 long 類型。

 複製
// keyword_enum2.cs// Using long enumeratorsusing 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 = 2147483648Min = 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, FogLights5
注釋

注意:如果從 Sat=1 中移除初始值設定項,結果將是:

 複製
Sun = 1Fri = 6
注釋

請注意,如果移除 FlagsAttribute,此樣本的輸出為:

5

5

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.