C# Enum 进行逻辑运算
Enum定义
enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型。
通常情况下,最好是在命名空间內直接定义 enum,以便该命名空间中所有的类都能够同样方便地访问它。
当然,也可以把enum嵌套在类或结构体中。
Enum默认值
默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。
例如,下面的枚举,Sat 是 0,Sun 是 1,Mon 是 2 等.
例如,下面的枚举,Sat 是 ,Sun 是 ,Mon 是 等.
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
如下面的示例所示枚举数可用初始值来重写默认值。
enum Days {Sat=, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,强制元素序列从 1 而不是 0 开始。 但是,一般建议包括值为 0 的常量。 有关更多信息,请参见 枚举类型(C# 编程指南)。
每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。 枚举元素的默认基础类型为 int。 要声明另一整型枚举(如 byte),请在标识符之后紧跟类型,然后再使用冒号,如下面的示例所示。
enum Days : byte {Sat=, 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), );
//结果输出: Cat
参考资料
http://www.dotnetperls.com/enum-flags
http://www.dotblogs.com.tw/atowngit/archive/2009/11/19/12051.aspx?fid=70079
C# Enum 进行逻辑运算的更多相关文章
- Swift enum(枚举)使用范例
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- 枚举:enum
枚举 所谓枚举就是指定好取值范围,所有内容只能从指定范围取得. 例如,想定义一个color类,他只能有RED,GREEN,BLUE三种植. 使用简单类完成颜色固定取值问题. 1,就是说,一个类只能完成 ...
- Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件
在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...
- 用枚举enum替代int常量
枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN ...
- The Java Enum: A Singleton Pattern [reproduced]
The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- (转)C# Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- set和enum类型的用法和区别
mysql中的set和enum类型的用法和区别 mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值. 1 2 3 ...
- java enum
小谈Java Enum的多态性 博客分类: Java JavaAppleJDKJVMIDEA Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态 ...
随机推荐
- CORS(跨域资源共享)
前言:上一篇文章在写如何使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享).虽然前些天也看了一下CORS相关的文章,但是 ...
- Javascript到PHP加密通讯的简单实现
其实内容主要来源于上一篇博文,只是重新组织了语言,并做了原理性的阐述,更容易理解:P ----------------------------------------- 华丽的分割线 -------- ...
- Ubuntu开机黑屏,无法进入系统
今天早上起来开机发现Ubuntu进不去了,启动项选择之后长时间的black of screen,击键盘.点鼠标毫无反应,后来实在等不下去了就按了一下电源键,以平时的性格就是强制关机的,这次轻轻碰一下就 ...
- javascript 中 !~ 什么意思
快过年放假了,也终于闲下来了.每天游览于各种技术文章中,这种状态好极了.下午看篇关于js的文章,其中有如下这么一段引起了我的注意. (function () { var names = []; ret ...
- 关于AutoCAD 2014的securityload…
昨天一个朋友给我打电话提到他关于AutoCAD 2014中安全加载SECURTY LOAD的一些困惑,我的同事Fenton写了一篇博客,对AutoCAD 2014安全加载的来龙去脉做了深入详细的阐述, ...
- smarty访问数组中的数据,如果是关联数组直接用点.
$tpl=new Smarty();//新建一个smarty对象,我使用的是Smarty-3.1.6版本 1.设置smarty模板路径$tpl->setTemplateDir():默认情况下是t ...
- android关于线程的那些事
今天发现之前自己一直有个误区,new Runnable(run()方法){}原来它不是一定创建一个线程 如果用主线程的handler去post(Runnable),他就不会创建子线程,而是在主线程上执 ...
- 【代码笔记】iOS-翻书效果的实现
代码: RootViewController.m #import "RootViewController.h" @interface RootViewController () @ ...
- FMDB简单用法
首先引入类库 声明数据库和路径 /** 声明数据库对象 */ @property (nonatomic, strong) FMDatabase *dataBase; /** 声明存储路径 */ ...
- 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...