C# Enum 进行逻辑运算
本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/4821224.html
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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验