列舉型別(C 程式設計指南) 摘抄msdn 備忘

2021-09-06 05:03:10 字數 3102 閱讀 1783

visual studio 2010

其他版本

5(共 5)對本文的評價是有幫助 評價此主題

列舉型別(也稱為列舉)為定義一組可以賦給變數的命名整數常量提供了一種有效的方法。例如,假設您必須定義乙個變數,該變數的值表示一周中的一天。該變數只能儲存七個有意義的值。若要定義這些值,可以使用列舉型別。列舉型別是使用 enum 關鍵字宣告的。

c#複製

enum days ;

enum months : byte ;

預設情況下,列舉中每個元素的基礎型別是 int。可以使用冒號指定另一種整數值型別,如前面的示例所示。有關可能的型別的完整列表,請參見 enum(c# 參考)。

以下是使用列舉而不使用數值型別的好處:

如果未在列舉數列表中指定元素的值,則值將自動按 1 遞增。在前面的示例中,days.sunday 的值為 0,days.monday 的值為 1,依此類推。建立新的 days 物件時,如果不顯式為其賦值,則它將具有預設值 days.sunday (0)。建立列舉時,應選擇最合理的預設值並賦給它乙個零值。這便使得只要在建立列舉時未為其顯式賦值,則所建立的全部列舉都將具有該預設值。

如果變數 meetingday 的型別為 days,則只能將 days 定義的某個值賦給它(無需顯式強制轉換)。如果會議日期更改,可以將 days 中的新值賦給 meetingday:

c#複製

days meetingday = days.monday;

//...

meetingday = days.friday;

注意可以將任意整數值賦給 meetingday。例如,**行 meetingday = (days) 42 不會產生錯誤。但也不應該這樣做,因為預設約定的是列舉變數只容納列舉定義的值之一。將任意值賦給列舉型別的變數很有可能會導致錯誤。

可以將任意值賦給列舉型別的列舉數列表中的元素,也可以使用計算值:

c#複製

enum machinestate

可以使用列舉型別定義位標誌,從而使該列舉型別的例項可以儲存列舉數列表中定義的值的任意組合。(當然,某些組合在您的程式**中可能沒有意義或不允許使用。)

建立位標誌列舉的方法是應用 system.flagsattribute 特性並適當定義一些值,以便可以對這些值執行 and、or、not 和 xor 按位運算。在位標誌列舉中包含乙個值為零(表示「未設定任何標誌」)的命名常量。如果零值不表示「未設定任何標誌」,則請不要為標誌指定零值。

在下面的示例中,定義了 days 列舉的另乙個版本,命名為 days2。days2 具有 flags 特性,且它的每個值都是 2 的若干次冪,指數依次遞增。這樣,您將能夠建立值為 days2.tuesday 和 days2.thursday 的 days2 變數。

c#複製

[flags]

enum days2

class myclass

若要在某個列舉上設定標誌,請使用按位 or 運算子,如下面的示例所示:

c#複製

// initialize with two flags using bitwise or.

meetingdays = days2.tuesday | days2.thursday;

// set an additional flag using bitwise or.

meetingdays = meetingdays | days2.friday;

console.writeline("meeting days are ", meetingdays);

// output: meeting days are tuesday, thursday, friday

// remove a flag using bitwise xor.

meetingdays = meetingdays ^ days2.tuesday;

console.writeline("meeting days are ", meetingdays);

// output: meeting days are thursday, friday

若要確定是否設定了特定標誌,請使用按位 and 運算,如下面的示例所示:

c#複製

// test value of flags using bitwise and.

bool test = (meetingdays & days2.thursday) == days2.thursday;

console.writeline("thursday a meeting day.", test == true ? "is" : "is not");

// output: thursday is a meeting day.

有關使用 system.flagsattribute 特性定義列舉型別時需要考慮的事項的更多資訊,請參見 system.enum。

所有列舉都是 system.enum 型別的例項。不能從 system.enum 派生新類,但可以使用它的方法發現有關列舉例項中的值的資訊以及操作這些值。

c#複製

string s = enum.getname(typeof(days), 4);

console.writeline(s);

console.writeline("the values of the days enum are:");

foreach (int i in enum.getvalues(typeof(days)))

console.writeline(i);

console.writeline("the names of the days enum are:");

foreach (string str in enum.getnames(typeof(days)))

console.writeline(str);

有關更多資訊,請參見 system.enum。

此外,還可以使用擴充套件方法為列舉建立新方法。有關更多資訊,請參見如何:為列舉建立新方法(c# 程式設計指南)。

參考enum(c# 參考)

system.enum

概念c# 程式設計指南

列舉 摘抄自《java程式設計思想》

列舉型別enum 當我們需要使用乙個只能取特定值的集合時,列舉為我們 提供了方便,由於列舉型別的例項是常量,所以習慣用大寫字母表示 enum spiciness public class test 當你建立enum時,編譯器會自動新增一些有用的特性,例如,它會建立 tostring 方法,以便你的e...

C 程式設計指南 語句型別

1.選擇語句 if.else.switch.case.2.迭代語句 do,for,foreach,while 3.跳轉語句 break 用於終止最近的封閉迴圈或它所在的switch語句。goto 語句 將程式控制直接傳遞給標記語句。goto語句乙個通常做法是將控制傳遞給特定的switch case ...

C 列舉型別

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