C#類和對象(七)——枚舉

    枚舉是一個值類型,包含一組命名的常量,如這裏的Color類型。枚舉類型用enum關鍵字定義:

public enum Color

{

Red,

Green,

Blue

}

    可以聲明枚舉類型的變量,如變量c1,用枚舉類型的名稱作爲前綴,設置一個命名常量,來賦予枚舉中的一個值:

Color c1 = Color. Red;

WriteLine( c1);

    運行程序,控制檯輸出顯示Red,這是枚舉的常量值。默認情況下,enum的類型是int。這個基本類型可以改爲其他整數類型(byte、short、int、帶符號的long和無符號變量)。命名常量的值從0開始遞增,但它們可以改爲其他值:

public enum Color : short

{

Red = 1,

Green = 2,

Blue = 3

}

    使用強制類型轉換可以把數字改爲枚舉值,把枚舉值改爲數字。

Color c2 = (Color) 2;

short number = (short) c2;

    還可以使用enum類型把多個選項分配給一個變量,而不僅僅是一個枚舉常量。爲此,分配給常量的值必須是不同的位,Flags屬性需要用枚舉設置。

枚舉類型DaysOfWeek爲每天定義了不同的值。要設置不同的位,可以使用用0x前綴指定的十六進制值輕鬆地完成,Flags屬性是編譯器創建值的另一個字符串表示的信息,例如給DaysOfWeek的一個變量設置值3,結果是Monday,如果使用Flags屬性,結果就是Tuesday:

[Flags]

public enum DaysOfWeek

{

Monday = 0x1,

Tuesday = 0x2,

Wednesday = 0x4,

Thursday = 0x8,

Friday = 0x10,

Saturday = 0x20,

Sunday = 0x40

}

    有了這個枚舉聲明,就可以使用邏輯或運算符爲一個變量指定多個值:

DaysOfWeek mondayAndWednesday = DaysOfWeek. Monday | DaysOfWeek. Wednesday;

WriteLine( mondayAndWednesday);

    運行程序,輸出日期的字符串表示:

Monday, Wednesday

    設置不同的位,也可以結合單個位來包括多個值,如Weekend的值0x60是用邏輯或運算符結合了Saturday和Sunday。Workday則結合了從Monday到Friday的所有日子,AllWeek用邏輯或運算符結合了Workday和Weekend:

[Flags]

public enum DaysOfWeek

{

Monday = 0x1,

Tuesday = 0x2,

Wednesday = 0x4,

Thursday = 0x8,

Friday = 0x10,

Saturday = 0x20,

Sunday = 0x40,

Weekend = Saturday | Sunday Workday = 0x1f,

AllWeek = Workday | Weekend

}

    有了這些代碼,就可以把DaysOfWeek.Weekend直接分配給變量,指定用邏輯或運算符結合DaysOfWeek.

Saturday和DaysOfWeek.Sunday的單個值,也可以得到相同的結果。輸出會顯示Weekend的字符串表示。

DaysOfWeek weekend = DaysOfWeek. Saturday | DaysOfWeek. Sunday;

WriteLine( weekend);

    使用枚舉,類Enum有時非常有助於動態獲得枚舉類型的信息。枚舉提供了方法來解析字符串,獲得相應的枚舉常數,獲得枚舉類型的所有名稱和值。下面的代碼片段使用字符串和Enum.TryParse來獲得相應的Color值:

Color red;

if (Enum. TryParse(" Red", out red))

{

WriteLine($" successfully parsed {red}");

}  

注意:Enum.TryParse<T>()是一個泛型方法,其中T是泛型參數類型。這個參數類型需要用方法調用定義。

Enum.GetNames方法返回一個包含所有枚舉名的字符串數組:

foreach (var day in Enum.GetNames(typeof( Color)))

{

WriteLine( day);

}

運行應用程序,輸出如下:

Red

Green

Blue

 

    爲了獲得枚舉的所有值,可以使用方法Enum.GetValues。Enum.GetValues返回枚舉值的一個數組。爲了獲得整數值,需要把它轉換爲枚舉的底層類型,爲此應使用foreach語句:

foreach (short val in Enum.GetValues( typeof( Color)))

{

WriteLine( val);

}

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