C# 枚舉
每種類型(除string外)都有明確的取值范圍。誠然,有些類型(如double)的取值范圍非常大, 可以看成是連續(xù)的,但它們?nèi)允且粋€固定集合。最簡單的示例是bool類型,它只能取兩個值:true或false。
有時希望變量取的是一個固定集合中的值。例如,讓orientation類型可以存儲north、south、east或west中的一個值。
此時可以使用枚舉類型。枚舉可以完成這個orientation類型的任務:它們允許定義一個類型,其取值范圍是用戶提供的值的有限集合。所以,需要創(chuàng)建自己的枚舉類型orientation,它可以從上述4個值中取一個值。
注意有一個附加步驟一不是僅聲明一個給定類型的變量,而是聲明和描述一個用戶定義的類型,再聲明這個新類型的變量。
定義枚舉
可以用enum關鍵字定義枚舉,如下所示:
enum <typeName>
{
<valuel>,
<value2>,
<value3>,
...
<valueN>
}
接著聲明這個新類型的變量:
<typeName> <varName>;
并賦值:
<varName> = <typeName>.<value>;
枚舉使用一個基本類型來存儲。枚舉類型可取的每個值都存儲為該基本類型的一個值,默認情況下該類型為int。通過在枚舉聲明中添加類型,就可以指定其他基本類型:
enum <typeName> : <underlyingType>
{
<valuel>,
<value2>,
<value3>,
....
<valueN>
}
枚舉的基本類型可以是 byte、sbyte、short、ushort、int、uint、long 和 ulong。
默認情況下,每個值都會根據(jù)定義的順序(從0開始),被自動賦予對應的基本類型值。這意味著<valuel> 的值是0, <value2>的值是1, <value3>的值是2,等等??梢灾貙戇@個賦值過程:使用=運算符,指定每個枚舉的實際值:
enum <typeName> : <underlyingType>
{
<valuel> = <actualVall>,
<value2> = <actualVal2>,
<value3> = <actualVal3>,
...
<valueN> = <actualValN>
}
還可以使用一個值作為另一個枚舉的基礎值,為多個枚舉指定相同的值:
enum <typeName> : <underlyingType>
{
<valuel> = <actualVall>,
<value2> = <valuel>f <value3>,
...
<valueN> - <actualValN>
}
未賦值的任何值都會自動獲得一個初始值,這里使用的值是從比上一個明確聲明的值大1開始的序列。例如,在上面的代碼中,<value3>的值是<valuel>+1。
注意這可能會產(chǎn)生預料不到的問題,在一個定義(如<value2>=<vakiel>)后指定的值可能與其他值相同。例如,在下面的代碼中,<value4>的值與<value2>的值相同:
enum <typeName> : <underlyingType>
{
<valuel> = <actualVall>,
<value2>,
<value3> = <valuel>,
<value4>,
...
<valueN> = <actualValN>
}
當然,如果這正是希望的結果,代碼就是正確的。還要注意,以循環(huán)方式賦值可能會產(chǎn)生錯誤,例如:
enum <typeName> : <underlyingType>
{
<valuel> = <value2>,
<value2> = <valuel>
}
點擊加載更多評論>>