enum(C# 參考)

來源:互聯網
上載者:User
enum(C# 參考)

 

 

enum 關鍵字用於聲明枚舉,即一種由一組稱為枚舉數列表的命名常量組成的獨特類型。

通常情況下,最好是在命名空間內直接定義枚舉,以便該命名空間中的所有類都能夠同樣方便地訪問它。但是,還可以將枚舉嵌套在類或結構中。

預設情況下,第一個枚舉數的值為 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 開始。但是,強烈建議枚舉包含一個值為 0 的常量。有關更多資訊,請參見{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl03',this);
}" href="http://msdn.microsoft.com/zh-cn/library/cc138362.aspx">枚舉類型(C# 編程指南)。

每種枚舉類型都有基礎類型,該類型可以是除 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl04',this);
}" href="http://msdn.microsoft.com/zh-cn/library/x9h8tsay.aspx">char 以外的任何整型。枚舉元素的預設基礎類型為 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl05',this);
}" href="http://msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx">int。若要聲明另一整型枚舉,例如 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl06',this);
}" href="http://msdn.microsoft.com/zh-cn/library/5bdb6693.aspx">byte,請在標識符之後緊跟類型,然後再使用冒號:

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

准許使用的枚舉類型有 byte、{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl08',this);
}" href="http://msdn.microsoft.com/zh-cn/library/d86he86x.aspx">sbyte、{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl09',this);
}" href="http://msdn.microsoft.com/zh-cn/library/ybs77ex4.aspx">short、{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl10',this);
}" href="http://msdn.microsoft.com/zh-cn/library/cbf1574z.aspx">ushort、{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl11',this);
}" href="http://msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx">int、{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl12',this);
}" href="http://msdn.microsoft.com/zh-cn/library/x0sksh43.aspx">uint、{
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl13',this);
}" href="http://msdn.microsoft.com/zh-cn/library/ctetwysk.aspx">long 或 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl14',this);
}" href="http://msdn.microsoft.com/zh-cn/library/t98873t4.aspx">ulong。

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

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

說明:

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

基礎類型指定為每個枚舉數分配的儲存大小。但是,從 enum 類型到整型的轉換需要用顯式類型轉換來完成。例如,下面的語句使用強制轉換(從 enum 轉換為 int)將枚舉數 Sun 賦值給一個 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl15',this);
}" href="http://msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx">int 類型的變數:

int x = (int)Days.Sun;

將 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl17',this);
}" href="http://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx">System..::.FlagsAttribute 應用於某個枚舉時,如果該枚舉包含一些使用按位 OR 運算組合的元素,這時您會注意到該屬性在用於某些工具時會影響 enum 的行為。當使用諸如 {
Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl19',this);
}" href="http://msdn.microsoft.com/zh-cn/library/system.console.aspx">Console 類方法、運算式計算機這樣的工具時,可以注意到這些變化。(請參見樣本 3)。

 可靠編程

與任何常量一樣,對枚舉中各個值的所有引用在編譯時間均將轉換為數值文本。這可形成潛在的版本控制問題,如{
Track('ctl00_rs1_mainContentContainer_cpe102091_c|ctl00_rs1_mainContentContainer_ctl24',this);
}" href="http://msdn.microsoft.com/zh-cn/library/ms173119.aspx">常量(C# 編程指南)中所述。

給新版本的枚舉賦其他值,或者更改新版本中枚舉成員的值,可導致相關原始碼出現問題。通常在 {
Track('ctl00_rs1_mainContentContainer_cpe102091_c|ctl00_rs1_mainContentContainer_ctl25',this);
}" href="http://msdn.microsoft.com/zh-cn/library/06tc147t.aspx">switch 語句中使用枚舉值。如果 enum 類型中添加了其他元素,則預設值的測試可能會意外地返回 true。

如果其他開發人員將使用您的代碼,您則需要提供相關說明,告訴開發人員如果任何 enum 類型中添加了新元素,他們的代碼應該如何響應。

 樣本

在此例中,聲明了一個枚舉 Days。兩個枚舉數被顯式轉換為整數並賦給整型變數。

C# 
public class EnumTest{enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };static void Main(){int x = (int)Days.Sun;int y = (int)Days.Fri;Console.WriteLine("Sun = {0}", x);Console.WriteLine("Fri = {0}", y);}}/* Output:Sun = 0Fri = 5*/

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

C# public class EnumTest2
{
    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);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/

下面的程式碼範例闡釋 enum 聲明上的 {
Track('ctl00_rs1_mainContentContainer_cpe102092_c|ctl00_rs1_mainContentContainer_ctl35',this);
}" href="http://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx">System..::.FlagsAttribute 屬性的使用和效果。

C# 
[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);}}/* Output:SunRoof, FogLights5*/
 注釋

請注意,如果移除 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.