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 进行逻辑运算的更多相关文章

  1. Swift enum(枚举)使用范例

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  2. 枚举:enum

    枚举 所谓枚举就是指定好取值范围,所有内容只能从指定范围取得. 例如,想定义一个color类,他只能有RED,GREEN,BLUE三种植. 使用简单类完成颜色固定取值问题. 1,就是说,一个类只能完成 ...

  3. Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件

    在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...

  4. 用枚举enum替代int常量

    枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN ...

  5. The Java Enum: A Singleton Pattern [reproduced]

    The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this ...

  6. c# (ENUM)枚举组合类型的谷歌序列化Protobuf

    c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...

  7. (转)C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  8. set和enum类型的用法和区别

    mysql中的set和enum类型的用法和区别 mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值.   1 2 3 ...

  9. java enum

    小谈Java Enum的多态性 博客分类: Java JavaAppleJDKJVMIDEA  Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态 ...

随机推荐

  1. [原][CSS3]会动的盒子机器人

    [PC与移动端皆可]会动的盒子机器人 浏览器必须可以解析perspective属性. 在线:http://wangxinsheng.herokuapp.com/boxMan 代码: <!DOCT ...

  2. Atitit.复合文档的格式 标准化格式

    Atitit.复合文档的格式 标准化格式 1. Docfile1 2. Iso   Cdf  cd file1 3. Zip1 4. Ooxml1 5. Odf  :OpenDocument Form ...

  3. 设置 Xcode 自动生成代码片段

    一.什么是代码片段 当在Xcode中输入dowhile并回车后,Xcode会出现下图所示的提示代码: 这就是代码片段,目的是使程序员以最快的速度输入常用的代码片段,提高编程效率.该功能是从Xcode4 ...

  4. XMPP学习——2、用户登录

    最近在学习XMPP的使用,打算完成一个完整较为完整地Demo示例,通过这个示例掌握xmpp的使用与开发.同时打算在这个示例中学习使用一下其他的开源类库,在此作为记录学习. 包括服务器端--Openfi ...

  5. 浅谈GridLayout(网格布局)

    Android 4.0 布局-->GridLayout 网格布局 以行列单元格的形式展示内部控件排列,可以实现类似计算机键盘效果 ,也可以实现可自动变行的标签群效果 使用GridLayout , ...

  6. 创建一个Android项目

    当我们的eclipse安装了SDK后,点击Window-->Perference-->DDMS.eclipse界面立即转为DDMS界面. 这时,我们可以打开我们的服务端(安卓模拟器或者是我 ...

  7. iOS 跳转到系统的设置界面

    跳到健康设置   上网找了一下  你会发现很难找到.代码如下  不信你试试 . NSURL *url = [NSURL URLWithString:@"prefs:root=Privacy& ...

  8. HTML5 初步了解

    这是HTM5L的第一篇博客. 那么就让我们简单的了解HTML5的语法吧. (HTML5运行环境要求极低,非关键地方就不做截图了) <!--根标签--> <html> <! ...

  9. Log4jConfigListener cannot be found — context fails to start

    解决方案 Reticulogic's second suggestion is correct. However, in Eclipse Helios, the "Java EE Modul ...

  10. IntelliJ IDEA 使用总结[zz]

    本文转自:http://cowboy-bebop.iteye.com/blog/1035550,仅做稍微整理,转载请注明出处. 1. IDEA内存优化 因机器本身的配置而配置: \IntelliJ I ...