C# Enum 進行邏輯運算


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM