Enum定義
enum 全稱(Enumeration),即一種由一組稱為枚舉數列表的命名常量組成的獨特類型。
通常情況下,最好是在命名空間內直接定義 enum,以便該命名空間中所有的類都能夠同樣方便地訪問它。
當然,也可以把enum嵌套在類或結構體中。
Enum默認值
默認情況下,第一個枚舉數的值為 0,后面每個枚舉數的值依次遞增 1。
例如,下面的枚舉,Sat 是 0,Sun 是 1,Mon 是 2 等.
例如,下面的枚舉,Sat 是 0,Sun 是 1,Mon 是 2 等. enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
如下面的示例所示枚舉數可用初始值來重寫默認值。
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚舉中,強制元素序列從 1 而不是 0 開始。 但是,一般建議包括值為 0 的常量。 有關更多信息,請參見 枚舉類型(C# 編程指南)。
每種枚舉類型都有基礎類型,該類型可以是除 char 以外的任何整型。 枚舉元素的默認基礎類型為 int。 要聲明另一整型枚舉(如 byte),請在標識符之后緊跟類型,然后再使用冒號,如下面的示例所示。
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
enum 的標准類型為 byte、sbyte、short、ushort、int、uint、long 或 ulong。
可以給 Days 類型的變量賦以基礎類型范圍內的任何值,所賦的值不限於已命名的常數。
enum E 的默認值為表達式 (E)0 生成的值。
注意事項
枚舉數的名稱中不能包含空白。
枚舉最常用在的地方,就是搭配 swith case 來完成 if else 的功能;
enum參考:https://msdn.microsoft.com/zh-cn/library/sbbt4032(v=vs.120).aspx
FlagsAttribute
enum搭配 Flags(System.FlagsAttribute)屬性 ,指示可以將枚舉作為 bit field(即一組標志)處理。這樣就可以對其執行 AND與(&)、OR或(|)、NOT非(~) 和 XOR異或(^) 位元運算。
C#邏輯運算符 https://msdn.microsoft.com/zh-cn/library/6a71f45d.aspx
FlagsAttribute參考:https://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx
邏輯運算Demo
定義Enum
創建一個enum為CWeaponType
[System.Flags] public enum CWeaponType { Unknow=0, Normal=1, // 出擊武器 Mat=2, // 進化未知素材 Cat=4, // 進化素材貓 Mouse=8, // 進化素材鼠 Plus=16, // 加蛋 Exp=32, // 經驗豬 WakeUp=64, // 覺醒碎片 Money=128, // 金錢貓 Crit=256, // 暴擊碎片 Fragment=512,// 英靈碎片 Weapon = Normal | Fragment //武器 }
Enum的邏輯運算
判斷fragment是否為武器
private void Start() { var type1 = CWeaponType.Fragment; var type2 = CWeaponType.Exp; var log1 = string.Format("{0} is weapon:{1}", type1, (int) (CWeaponType.Weapon & type1) != 0); var log2 = string.Format("\t {0} is weapon:{1}", type2, (int) (CWeaponType.Weapon & type2) != 0); Debug.LogWarning(log1 + log2); }
運行結果
Fragment is weapon:True Exp is weapon:False
此demo 就是判斷 fragment 是否屬於weapon?
代碼中使用 & 符號判斷,結果為 0 就不屬於,結果為(int)CWeaponType.Fragment 就是屬於。
Enum實用方法
字符串轉成枚舉
CWeaponType type= (CWeaponType) Enum.Parse(typeof (CWeaponType), "Normal");
枚舉類型轉成字符串
string enumName=Enum.GetName(typeof (CWeaponType), 4);
//結果輸出: Cat
參考資料
http://www.dotnetperls.com/enum-flags
http://www.dotblogs.com.tw/atowngit/archive/2009/11/19/12051.aspx?fid=70079