加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C# Enum 进行逻辑运算

发布时间:2021-05-21 06:58:58 所属栏目:大数据 来源: https://www.jb51.cc
导读:Enum定义 enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型。 通常情况下,最好是在命名空间內直接定义 enum,以便该命名空间中所有的类都能够同样方便地访问它。 当然,也可以把enum嵌套在类或结构体中。 Enum默认值 @H_502_11

Enum定义

enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型。

通常情况下,最好是在命名空间內直接定义 enum,以便该命名空间中所有的类都能够同样方便地访问它。

当然,也可以把enum嵌套在类或结构体中。

Enum默认值

@H_502_11@默认情况下,第一个枚举数的值为 0,@H_502_11@后面每个枚举数的值依次递增 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,Fri};


在此枚举中,强制元素序列从 1 而不是 0 开始。 @H_502_11@但是,一般建议包括值为 0 的常量。 有关更多信息,请参见 枚举类型(C# 编程指南)。
每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。 枚举元素的默认基础类型为 int。 要声明另一整型枚举(如 byte),请在标识符之后紧跟类型,然后再使用冒号,如下面的示例所示。

enum Days : byte {Sat=enum 的标准类型为 byte、sbyte、short、ushort、int、uint、long 或 ulong。

可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。
enum E 的默认值为表达式 (E)0 生成的值。

@H_502_11@注意事项

枚举数的名称中不能包含空白。


枚举最常用在的地方,就是搭配 swith case 來完成 if else 的功能;

enum参考:https://msdn.microsoft.com/zh-cn/library/sbbt4032(v=vs.120).aspx

FlagsAttribute

enum搭配? Flags(System.FlagsAttribute)属性 ,指示可以将枚举作为 bit field(即一组标志)处理。这样就可以对其执行 @H_502_11@AND与(&)、@H_502_11@OR或(|)、@H_502_11@NOT非(~) 和 @H_502_11@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(@H_404_143@"{0} is weapon:{1}",type1,(int) (CWeaponType.Weapon & type1) != 0);
    var log2 = string.Format(@H_404_143@"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实用方法

@H_502_11@字符串转成枚举

CWeaponType type= (CWeaponType) Enum.Parse(typeof (CWeaponType),"Normal");

@H_502_11@枚举类型转成字符串

string enumName=Enum.GetName(4);
//结果输出: Cat

参考资料

http://www.dotnetperls.com/enum-flags

http://www.dotblogs.com.tw/atowngit/archive/2009/11/19/12051.aspx?fid=70079

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读