C 程式設計中列舉型別的使用教程

2022-09-26 06:51:09 字數 3164 閱讀 7090

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

enum days ;

enum months : byte ;

預設情況下,列舉中每個元素的基礎型別是 int。可以使用冒程式設計客棧號指定另一種整數值型別,如前面的示例所示。可以通過轉換驗證基礎數值與基礎型別,如下例所示。

days today = days.monday;

int daynumber =(int)today;

console.writeline(" is day number #.", today, daynumber);

months thismonth = months.dec;

byte monthnumber = (byte)thismonth;

console.writeline(" is month number #.", thismonth, monthnumber);

輸出:monday is day number #1.

dec is month number #11.

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

明確為客戶端**指定哪些值是變數的有效值。

在 visual studio 中,intellisense 列出定義的值。

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

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

days meetingday = days.monday;

//...

meetingday = days.friday;

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

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

enum machinestate

列舉型別作為位標誌

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

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

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

[flags]

enum days2

class myclass

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

// initialize with two flags using bitwise or.

meetingdays = days2.tuesday | da程式設計客棧ys2.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 運算,如下面的示例所示:

// 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.enum 方法發現和操作列舉值

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

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);

本文標題: c#程式設計中列舉型別的使用教程

本文位址:

C 中列舉型別的使用總結

解析 它是乙個使用者宣告的值型別 示例 enum suit suit表示一副牌,它有4個花色 梅花 clubs 方塊 diamonds 紅心 hearts 黑桃 spades sealed class example 使用規則 列舉的宣告可以出現在類宣告的相同地方。列舉的宣告包括名字 訪問許可權 內...

C 中的列舉型別

c 中的列舉 列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte sbyte short ushort int uint long 或...

C 中列舉型別

列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte sbyte short ushort int uint long 或 ulong ...