位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# 枚舉

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

    每種類(lèi)型(除string外)都有明確的取值范圍。誠(chéng)然,有些類(lèi)型(如double)的取值范圍非常大, 可以看成是連續(xù)的,但它們?nèi)允且粋€(gè)固定集合。最簡(jiǎn)單的示例是bool類(lèi)型,它只能取兩個(gè)值:true或false。

    有時(shí)希望變量取的是一個(gè)固定集合中的值。例如,讓orientation類(lèi)型可以存儲(chǔ)north、south、east或west中的一個(gè)值。

    此時(shí)可以使用枚舉類(lèi)型。枚舉可以完成這個(gè)orientation類(lèi)型的任務(wù):它們?cè)试S定義一個(gè)類(lèi)型,其取值范圍是用戶提供的值的有限集合。所以,需要?jiǎng)?chuàng)建自己的枚舉類(lèi)型orientation,它可以從上述4個(gè)值中取一個(gè)值。

    注意有一個(gè)附加步驟一不是僅聲明一個(gè)給定類(lèi)型的變量,而是聲明和描述一個(gè)用戶定義的類(lèi)型,再聲明這個(gè)新類(lèi)型的變量。

定義枚舉

可以用enum關(guān)鍵字定義枚舉,如下所示:

enum <typeName>

{

    <valuel>,

    <value2>,

    <value3>,

    ...

    <valueN>

}

接著聲明這個(gè)新類(lèi)型的變量:

<typeName> <varName>;

并賦值:

<varName> = <typeName>.<value>;

枚舉使用一個(gè)基本類(lèi)型來(lái)存儲(chǔ)。枚舉類(lèi)型可取的每個(gè)值都存儲(chǔ)為該基本類(lèi)型的一個(gè)值,默認(rèn)情況下該類(lèi)型為int。通過(guò)在枚舉聲明中添加類(lèi)型,就可以指定其他基本類(lèi)型:

enum <typeName> : <underlyingType>

{

    <valuel>,

    <value2>,

    <value3>,

    ....

    <valueN>

}

枚舉的基本類(lèi)型可以是 byte、sbyte、short、ushort、int、uint、long 和 ulong。

默認(rèn)情況下,每個(gè)值都會(huì)根據(jù)定義的順序(從0開(kāi)始),被自動(dòng)賦予對(duì)應(yīng)的基本類(lèi)型值。這意味著<valuel> 的值是0, <value2>的值是1, <value3>的值是2,等等??梢灾貙?xiě)這個(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>

}

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部