程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#編程中列舉類型的應用教程

C#編程中列舉類型的應用教程

編輯:C#入門知識

C#編程中列舉類型的應用教程。本站提示廣大學習愛好者:(C#編程中列舉類型的應用教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#編程中列舉類型的應用教程正文



列舉類型(也稱為列舉)為界說一組可以賦給變量的定名整數常量供給了一種有用的辦法。例如,假定您必需界說一個變量,該變量的值表現一周中的一天。該變量只能存儲七個成心義的值。若要界說這些值,可使用列舉類型。列舉類型是應用 enum症結字聲明的。

enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; 

默許情形下,列舉中每一個元素的基本類型是 int。可使用冒號指定另外一種整數值類型,如後面的示例所示。可以經由過程轉換驗證基本數值與基本類型,以下例所示。

Days today = Days.Monday;
int dayNumber =(int)today;
Console.WriteLine("{0} is day number #{1}.", today, dayNumber);

Months thisMonth = Months.Dec;
byte monthNumber = (byte)thisMonth;
Console.WriteLine("{0} is month number #{1}.", 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 的類型為 Days,則只能將 Days 界說的某個值賦給它(無需顯式強迫轉換)。假如會議日期更改,可以將 Days 中的新值賦給 meetingDay:

Days meetingDay = Days.Monday;
//...
meetingDay = Days.Friday;

留意:可以將隨意率性整數值賦給 meetingDay。例如,代碼行 meetingDay = (Days) 42 不會發生毛病。但也不該該如許做,由於默許商定的是列舉變量只包容列舉界說的值之一。將隨意率性值賦給列舉類型的變量很有能夠會招致毛病。
可以將隨意率性值賦給列舉類型的列舉數列表中的元素,也能夠應用盤算值:

enum MachineState
{
  PowerOff = 0,
  Running = 5,
  Sleeping = 10,
  Hibernating = Sleeping + 5
}

列舉類型作為位標記
可使用列舉類型界說位標記,從而使該列舉類型的實例可以存儲列舉數列表中界說的值的隨意率性組合。(固然,某些組合在您的法式代碼中能夠沒成心義或不許可應用。)
創立位標記列舉的辦法是運用 System.FlagsAttribute 特征並恰當界說一些值,以即可以對這些值履行 AND、OR、NOT 和 XOR 按位運算。在位標記列舉中包括一個值為零(表現“未設置任何標記”)的定名常量。假如零值不表現“未設置任何標記”,則請不要為標記指定零值。
鄙人面的示例中,界說了 Days 列舉的另外一個版本,定名為 Days2。 Days2 具有 Flags 特征,且它的每一個值都是 2 的若干次冪,指數順次遞增。如許,您將可以或許創立值為 Days2.Tuesday 和 Days2.Thursday 的 Days2 變量。

[Flags]
enum Days2
{
  None = 0x0,
  Sunday = 0x1,
  Monday = 0x2,
  Tuesday = 0x4,
  Wednesday = 0x8,
  Thursday = 0x10,
  Friday = 0x20,
  Saturday = 0x40
}
class MyClass
{
  Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}

若要在某個列舉上設置標記,請應用按位 OR 運算符,以下面的示例所示:

// 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 {0}", meetingDays);
// Output: Meeting days are Tuesday, Thursday, Friday

// Remove a flag using bitwise XOR.
meetingDays = meetingDays ^ Days2.Tuesday;
Console.WriteLine("Meeting days are {0}", 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 {0} 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);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved