C# 枚舉

2018-01-16 04:23 更新

C#枚舉

枚舉是一種特殊的值類型,是指定的數(shù)字常量組。

例子

例如:

public enum Direction { Left, Right, Top, Bottom } 

我們可以使用這個枚舉類型如下:

Direction topSide = Direction.Top; 
bool isTop = (topSide == Direction.Top); // true 

基本整數(shù)值

每個枚舉成員都有一個基本的整數(shù)值。

默認情況下,底層值的類型為int。

將以枚舉成員的聲明順序自動分配常量0,1,2 ...。

我們可以指定一個替代整數(shù)類型,如下:

public enum Direction : byte { 
   Left, Right, Top, Bottom 
}

我們還可以為每個枚舉成員指定明確的底層值:

public enum Direction : byte { 
   Left=1, Right=2, Top=10, Bottom=11 
} 

編譯器還允許我們顯式地分配一些枚舉成員。

未賦值的枚舉成員保持從最后一個顯式值開始遞增。

上述示例等效于以下內(nèi)容:

public enum Direction : byte { 
   Left=1, Right, Top=10, Bottom 
} 

枚舉轉(zhuǎn)換

我們可以使用顯式轉(zhuǎn)換將枚舉實例轉(zhuǎn)換為其基礎整數(shù)值:

int i = (int) Direction.Left; 
Direction side = (Direction) i; 
bool leftOrRight = (int) side <= 2; 

數(shù)字文字0由編譯器在枚舉表達式中特別處理,不需要顯式轉(zhuǎn)換:

Direction b = 0; // No cast required 
if (b == 0) ... 

枚舉的第一個成員通常用作“默認”值。

對于組合枚舉類型,0表示“無標志”。


標志枚舉

我們可以結(jié)合枚舉成員。

為了防止歧義,可組合枚舉的成員需要明確賦值,通常為2的冪。

例如:

[Flags] 
public enum Directions { 
   None=0, Left=1, Right=2, Top=4, Bottom=8 
} 

要使用組合枚舉值,我們使用位運算符,例如|和&

它們對基本整數(shù)值進行操作:

Directions leftRight = Directions.Left | Directions.Right; 

if ((leftRight & Directions.Left) != 0) {
   Console.WriteLine ("Includes Left"); // Includes Left 
}
string formatted = leftRight.ToString(); // "Left, Right" 

Directions s = Directions.Left; 
s |= Directions.Right; 
Console.WriteLine (s == leftRight); // True 
s ^= Directions.Right; // Toggles Directions.Right 
Console.WriteLine (s); // Left 

按照慣例,當其成員可組合時,F(xiàn)lags屬性應該始終應用于枚舉類型。

為方便起見,您可以在枚舉聲明中包含組合成員:

[Flags] 
public enum Directions {
    None=0,  Left=1, Right=2, Top=4, Bottom=8, 
    LeftRight = Left | Right, 
    TopBottom = Top | Bottom, 
    All = LeftRight | TopBottom 
} 

枚舉運算符

使用枚舉的運算符有:

= == != < > <= >= + -^ & | ? 
+= -= ++ -- sizeof 

按位,算術(shù)和比較運算符返回處理基本整數(shù)值的結(jié)果。

允許在枚舉和整數(shù)類型之間添加,但不允許在兩個枚舉之間添加。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號