枚舉概念
枚舉類型(也稱為枚舉)提供了一種有效的方式來定義可能分配給變量的一組已命名整數常量。該類型使用enum關鍵字聲明。
示例代碼1
enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
默認情況下枚舉中每個元素的基本類型都是int。可以使用冒號指定另一種整數類型。
示例代碼2
enum Day : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
默認情況下,第一個枚舉值具有值0,並且每個連續枚舉數的值將增加1。
枚舉數可以使用初始值設定項來替代默認值。
若設置某一枚舉數的值,之后的枚舉數仍然按1遞增。
示例代碼3
enum Day {Sat=1, Sun, Mon, Tue=5, Wed, Thu, Fri};
每個枚舉都有一個基礎類型,該基礎類型可以是除char外的任何整數類型,枚舉元素的默認基礎類型是int。
已批准的枚舉類型有byte、sbyte、short、ushort、int、uint、long或ulong。
可以為枚舉類型的枚舉器列表中的元素分配任何值,也可以使用計算值。
示例代碼4
enum MachineState
{
PowerOff = 0,
Running = 5,
Sleeping = 10,
Hibernating = Sleeping + 5
}
枚舉方法
獲取名稱
public static string GetName(Type enumType, object value);
示例代碼5
//獲取Day枚舉中Day.Friday的名稱,返回值為"Friday" System.Enum.GetName(typeof(Day), Day.Friday)
獲取名稱數組
public static string[] GetNames(Type enumType);
示例代碼6
string[] names = System.Enum.GetNames(typeof(Day));
獲取實例值得數組
public static Array GetValues(Type enumType);
實例代碼7
Array arr = System.Enum.GetValues(typeof(Day));
將枚舉常數的名稱或數值的字符串表示轉換成等效的枚舉對象
public static object Parse(Type enumType, string value);
示例代碼8
string day = Day.Friday.ToString(); var fri = (Day)System.Enum.Parse(typeof(Day),day);
相關常用方法可以參考枚舉基類 System.Enum
作為位標志的枚舉類型
可以使用枚舉類型來定義位標志,這使枚舉類型的實例能夠存儲枚舉器列表中定義的值的任何組合。 (當然,某些組合在你的程序代碼中可能沒有意義或不允許使用。)
創建位標志枚舉的方法是,應用 System.FlagsAttribute 屬性並適當定義一些值,以便可以對這些值執行 AND、OR、NOT 和 XOR 按位運算。 在位標志枚舉中,包括一個值為零(表示“未設置任何標志”)的命名常量。 如果零值不表示“未設置任何標志”,請勿為標志指定零值。
示例代碼9
[Flags]
enum Days
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
枚舉的位運算
|並集 &交集 ^差集 ~取反
為枚舉拓展新方法
示例代碼10
[Display(Name = "一周")]
public enum Day
{
[Display(Name = "星期天")]
Sunday,
[Display(Name = "星期一")]
Monday,
[Display(Name = "星期二")]
Tuesday,
[Display(Name = "星期三")]
Wednesday,
[Display(Name = "星期四")]
Thursday,
[Display(Name = "星期五")]
Friday,
[Display(Name = "星期六")]
Saturday
}
/// <summary>
/// 枚舉拓展類
/// </summary>
public static class EnumExtend
{
/// <summary>
/// 根據System.ComponentModel.DataAnnotations下的DisplayAttribute特性獲取顯示文本
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public static string GetDisplayText(this Enum t)
{
var t_type = t.GetType();
var fieldName = Enum.GetName(t_type, t);
var objs = t_type.GetField(fieldName).GetCustomAttributes(typeof(DisplayAttribute), false);
return objs.Length > 0 ? ((DisplayAttribute)objs[0]).Name : null;
}
}
參考文獻:枚舉類型(C#編程指南)
