C 類和物件(七) 列舉

2021-08-10 22:14:37 字數 2524 閱讀 7865

列舉是乙個值型別,包含一組命名的常量,如這裡的color型別。列舉型別用enum關鍵字定義:

public enum color

red,

green,

blue

可以宣告列舉型別的變數,如變數c1,用列舉型別的名稱作為字首,設定乙個命名常量,來賦予列舉中的乙個值:

color c1 = color. red;

writeline( c1);

執行程式,控制台輸出顯示red,這是列舉的常量值。預設情況下,enum的型別是int。這個基本型別可以改為其他整數型別(byte、short、int、帶符號的long和無符號變數)。命名常量的值從0開始遞增,但它們可以改為其他值:

public enum color : short

red = 1,

green = 2,

blue = 3

使用強制型別轉換可以把數字改為列舉值,把列舉值改為數字。

color c2 = (color) 2;

short number = (short) c2;

還可以使用enum型別把多個選項分配給乙個變數,而不僅僅是乙個列舉常量。為此,分配給常量的值必須是不同的位,flags屬性需要用列舉設定。

列舉型別daysofweek為每天定義了不同的值。要設定不同的位,可以使用用0x字首指定的十六進製制值輕鬆地完成,flags屬性是編譯器建立值的另乙個字串表示的資訊,例如給daysofweek的乙個變數設定值3,結果是monday,如果使用flags屬性,結果就是tuesday:

[flags]

public enum daysofweek

monday = 0x1,

tuesday = 0x2,

wednesday = 0x4,

thursday = 0x8,

friday = 0x10,

saturday = 0x20,

sunday = 0x40

有了這個列舉宣告,就可以使用邏輯或運算子為乙個變數指定多個值:

daysofweek mondayandwednesday = daysofweek. monday | daysofweek. wednesday;

writeline( mondayandwednesday);

執行程式,輸出日期的字串表示:

monday, wednesday

設定不同的位,也可以結合單個位來包括多個值,如weekend的值0x60是用邏輯或運算子結合了saturday和sunday。workday則結合了從monday到friday的所有日子,allweek用邏輯或運算子結合了workday和weekend:

[flags]

public enum daysofweek

monday = 0x1,

tuesday = 0x2,

wednesday = 0x4,

thursday = 0x8,

friday = 0x10,

saturday = 0x20,

sunday = 0x40,

weekend = saturday | sunday workday = 0x1f,

allweek = workday | weekend

有了這些**,就可以把daysofweek.weekend直接分配給變數,指定用邏輯或運算子結合daysofweek.

saturday和daysofweek.sunday的單個值,也可以得到相同的結果。輸出會顯示weekend的字串表示。

daysofweek weekend = daysofweek. saturday | daysofweek. sunday;

writeline( weekend);

使用列舉,類enum有時非常有助於動態獲得列舉型別的資訊。列舉提供了方法來解析字串,獲得相應的列舉常數,獲得列舉型別的所有名稱和值。下面的**片段使用字串和enum.tryparse來獲得相應的color值:

color red;

if (enum. tryparse(" red", out red))

writeline($" successfully parsed ");

注意:enum.tryparse()是乙個泛型方法,其中t是泛型引數型別。這個引數型別需要用方法呼叫定義。

enum.getnames方法返回乙個包含所有列舉名的字串陣列:

foreach (var day in enum.getnames(typeof( color)))

writeline( day);

執行應用程式,輸出如下:

red

green

blue

為了獲得列舉的所有值,可以使用方法enum.getvalues。enum.getvalues返回列舉值的乙個陣列。為了獲得整數值,需要把它轉換為列舉的底層型別,為此應使用foreach語句:

foreach (short val in enum.getvalues( typeof( color)))

writeline( val);

23 列舉類和元類

列舉類from enum import enum month enum month jan feb mar apr may jun jul aug sep oct nov dec 可以直接使用month.jan來引用乙個常量,或者列舉它的所有成員 for name,member in month.m...

C語言 22 列舉

列舉是c語言中的一種基本資料型別,並不是構造型別,它可以用於宣告一組常數。當乙個變數有幾個固定的可能取值時,可以將這個變數定義為列舉型別。比如,你可以用乙個列舉型別的變數來表示季節,因為季節只有4種可能的取值 春天 夏天 秋天 冬天。回到頂部 一般形式為 enum 列舉名 enum season 回...

C 入門9 2 列舉

為什麼會有列舉?多人同時開發erp人員管理系統 儲存人員資訊有 姓名,性別,年齡,部門,職位。簡言之 如果希望得到乙個固定集合的值,就採用列舉。宣告方式 public enum 列舉名 值1,值2,值3,型別轉換 列舉與int相互轉換 要獲得列舉的值,只要轉換為string型別。列舉與string相...