列舉是乙個值型別,包含一組命名的常量,如這裡的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相...