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