C 列舉型別

2021-10-14 14:30:57 字數 1890 閱讀 8533

列舉型別 是由基礎整型數值型別的一組命名常量定義的值型別。 若要定義列舉型別,請使用 enum 關鍵字並指定列舉成員 的名稱:

enum season

預設情況下,列舉成員的關聯常數值為型別 int;它們從零開始,並按定義文字順序遞增 1。 可以顯式指定任何其他整數數值型別作為列舉型別的基礎型別。 還可以顯式指定關聯的常數值,如下面的示例所示:

enum errorcode :

ushort

不能在列舉型別的定義內定義方法。 若要向列舉型別新增功能,請建立擴充套件方法。

列舉型別 e 的預設值是由表示式 (e)0 生成的值,即使零沒有相應的列舉成員也是如此。

可以使用列舉型別,通過一組互斥值或選項組合來表示選項。 若要表示選項組合,請將列舉型別定義為位標誌。

如果希望列舉型別表示選項組合,請為這些選項定義列舉成員,以便單個選項成為位欄位。 也就是說,這些列舉成員的關聯值應該是 2 的冪。 然後,可以使用按位邏輯運算子|或 & 分別合併選項或交叉組合選項。 若要指示列舉型別宣告位欄位,請對其應用 flags 屬性。 如下面的示例所示,還可以在列舉型別的定義中包含一些典型組合。

[

flags

]public

enum days

public

class

flagsenumexample")

;// output:

// join a meeting by phone on friday

bool ismeetingontuesday =

(meetingdays & days.tuesday)

== days.tuesday;

console.

writeline

($"is there a meeting on tuesday: ");

// output:

// is there a meeting on tuesday: false

var a =

(days)37;

console.

writeline

(a);

// output:

// monday, wednesday, saturday

}}

system.enum 型別是所有列舉型別的抽象基類。 它提供多種方法來獲取有關列舉型別及其值的資訊。

從 c# 7.3 開始,你可以在基類約束中使用 system.enum(稱為列舉約束),以指定型別引數為列舉型別。 所有列舉型別也都滿足 struct 約束,此約束用於指定型別引數為不可為 null 的值型別。

對於任何列舉型別,列舉型別與其基礎整型型別之間存在顯式轉換。 如果將列舉值轉換為其基礎型別,則結果為列舉成員的關聯整數值。

public

enum season

public

class

enumconversionexample

is ");

// output: integral value of autumn is 2

var b =

(season)1;

console.

writeline

(b);

// output: summer

var c =

(season)4;

console.

writeline

(c);

// output: 4

}}

使用 enum.isdefined 方法來確定列舉型別是否包含具有特定關聯值的列舉成員。

對於任何列舉型別,都存在分別與 system.enum 型別的裝箱和取消裝箱相互轉換。

C 列舉型別

c 中的列舉型別繼承於 c 語言。就像其他從 c 語言繼承過來的很多特性一樣,c 列舉也有缺點,這其中最顯著的莫過於作用域問題 在列舉型別中定義的常量,屬於定義列舉的作用域,而不屬於這個列舉型別。例如下面的示例 enum fileaccess fileaccess access read 正確 fi...

c 列舉型別

列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 列舉由int,uint,byte,sbyte,long,ulong,short,ushort這8種基元型別構成基型別,沒有顯式地宣告基礎型別的列舉聲 明意味著所對應...

C 列舉型別

如果乙個變數你需要幾種可能存在的值,那麼就可以被定義成為列舉型別。之所以叫列舉就是說將變數或者叫物件可能存在的情況也可以說是可能的值一一例舉出來。舉個例子來說明一吧,為了讓大家更明白一點,比如乙個鉛筆盒中有一支筆,但在沒有開啟之前你並不知道它是什麼筆,可能是鉛筆也可能是鋼筆,這裡有兩種可能,那麼你就...