C#中的数据类型简介(枚举)

枚举的定义

根据MSDN上给出的定义,枚举是一个指定的常数集,其基础类型可以是除Char外的任何整型。 如果没有显式声明基础类型,则使用 Int32。 Enum 是 .NET Framework 中所有枚举的基类。其基础类型可以是byte、sbyte、short、ushort、int、unit、long、ulong。默认情况下,第一个枚举数的值为0,然后后续的枚举数依次加1。

枚举的申明

枚举可以申明在命名空间下和类同级别,也可申明在类的内部。申明语法如下:

[access modifiers] enum <identifier> [:enum_base]

{

enum body

}

Access modifiers : 定义访问修饰符,只能是public和internal,默认internal

Identifier:定义枚举的名称

Enum_base:定义枚举整数的类型,默认是int(可以定义除Char外的任何整数类型,详见上面枚举的定义段)

namespace enumDemo
{
enum Color:byte //基础类型为byte
{
Red,
Orange,
Yellow,
Green,
Cyan,
Blue,
Purple, //可以省略逗号
}; //可以省略分号 class Program
{
static void Main(string[] args)
{
}
}
}
    enum Color:byte  //基础类型为byte
{
Red=, //可以用基础数重定义默认值,Red基础数定义从2开始,那么Orange基础数为3,后续常量值依此类推,
//但是建议基础数据定义包含默认值,否则枚举的实例化可能会出现问题
Orange,
Yellow,
Green,
Cyan,
Blue,
Purple,
};

实例化枚举类型

实例化枚举值可以有三种方法

1,直接赋值为枚举常量

2,通过枚举值转化赋值

3,通过构造函数实例化枚举值

    class Program
{
static void Main(string[] args)
{
Color myColor = Color.Yellow; //赋值枚举常量
Color myColor1 = (Color); //赋值枚举值,然后转为枚举常量
Color myColor2 = new Color(); //构造函数的初始化,myColor2赋值的枚举值为0,但是Color枚举的最小值为2,是一个非法值
Console.WriteLine("my color is {0}, color value is {0:D}",myColor);
Console.WriteLine(myColor1);
Console.WriteLine("my color is {0},color value is {1} " ,(Color)myColor2,myColor2);
Console.Read();
}
}

枚举类型的转化

System.Enum 类型是所有枚举类型的抽象基类(它是一种与枚举类型的基础类型不同的独特类型),并且从 System.Enum 继承的成员在任何枚举类型中都可用。存在从任何枚举类型到System.Enum 的装箱转换,并且存在从 System.Enum 到任何枚举类型的取消装箱转换。System.Enum 本身不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。类型 System.Enum 从类型 System.ValueType派生,而后者又从类型 object 派生。在运行时,类型 System.Enum 的值可以是 null 或是对任何枚举类型的装了箱的值的引用。

    class Program
{
static void Main(string[] args)
{
Color color1 = (Color); // 将整数转化为枚举常量
int int1 = (int)Color.Green; // 将枚举常量转化为整数
Console.WriteLine(int1);
string[] format = { "G", "F", "X", "D" };
foreach (string f in format)
{
string colorStr = color1.ToString(f); //格式化输出
Console.WriteLine(colorStr);
}
Console.WriteLine("Color Format is: {0}", Enum.Format(typeof(Color), (byte), "G")); //通过format方法格化将枚举值转为string
Console.WriteLine("Color Constant is :{0}", Enum.GetName(typeof(Color), (byte))); //通过GetName方法将枚举值转化为string,8默认是int类型需转化为Color的基础类型byte
foreach (string item in Enum.GetNames(typeof(Color))) //通过GetName方法将枚举转化为string数组
Console.WriteLine("Color Name Constant is :{0}", item); foreach (Color item in Enum.GetValues(typeof(Color))) //通过GetValues方法转化为Color常量
Console.WriteLine("Color value is {0}", item);
if (Enum.IsDefined(typeof(Color), (byte)))
Console.WriteLine("the value 4's constant is {0}", Enum.Parse(typeof(Color),""));
else
Console.WriteLine("the 4 value is not define");
Color color2 = (Color)Enum.ToObject(typeof(Color), ); //通过ToObject方法将整数值转化为枚举常量
Console.WriteLine(color2);
Color color3;
if (Enum.TryParse("", out color3)) //通过TryParse试做将字符串转换为枚举常量
Console.WriteLine("The value 2 is Defined: {0}",color3);
else
Console.WriteLine("The value 2 is not Defined"); if (Enum.TryParse("BLACK", out color3)) //通过TryParse试做将字符串转换为枚举常量
Console.WriteLine("The CONSTANT BLACK is Defined: {0}", color3);
else
Console.WriteLine("The CONSTANT BLACK is not Defined");
Console.Read();
}
}

位运算

在枚举的申明上面加上[Flags]特性

    class Program
{
[Flags]
enum familyPets
{
None = 0x0, //定义16进制的0
Dog = 0x01, //定义16进制的1
Cat = 0x02,
Bird = 0x04,
Duck = 0x08,
}; static void Main(string[] args)
{
familyPets fp = familyPets.Dog | familyPets.Cat;
Console.WriteLine("Pets: {0:G} ({0:D})", fp); //显示结果Dog,Cat(3),16进制1和2按位或运算结果为3
if (fp.HasFlag(familyPets.Cat)) //判断fp是否定义位域Cat
Console.WriteLine("有宠物猫。");
else
Console.WriteLine("没有宠物猫。"); if ((fp & familyPets.Dog) == familyPets.Dog) //fp和Dog位域按位与运算
Console.WriteLine("有宠物Dog。");
else
Console.WriteLine("没有宠物Dog。"); if (fp == familyPets.None) //fp位运算的结果为3,不为0
Console.WriteLine("家庭里没有宠物。");
else
Console.WriteLine("家庭里有宠物。");
Console.Read();
}
}

c#中的数据类型简介(枚举)的更多相关文章

  1. c#中的数据类型简介(委托)

    c#中的数据类型简介(委托) 什么是委托? 委托是一种类型,它封装了一类方法,这些方法具有相同的方法签名(signature).定义听起来有点拗口,首先可以确定委托是一种数据类型,那么什么是方法签名, ...

  2. c#中的数据类型简介(数组)

    c#中的数据类型简介(数组) 数组定义 可以将数组看成相同数据类型的一组或多组数据,包括一维数组,多维数组和交错数组. 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null. 交错数组是指 ...

  3. c#中的数据类型简介(string)

    Sting 字符串 引入话题 字符串是一个引用类型,从string数据类型的代码定义中也可以看出它实现了IEnumerable<char>接口和IEnumerable接口,因此字符串可以看 ...

  4. c#中的数据类型简介

    一.C#中的变量和常量 C#中用于定义常量的方式有两种一个使用const关键字,一个是用readonly关键字.使用const定义的常量叫静态常量(compile-time constant),用re ...

  5. c#中的数据类型简介(委托)

    什么是委托? 委托是一种类型,它封装了一类方法,这些方法具有相同的方法签名(signature)和返回类型.定义听起来有点拗口,首先可以确定委托是一种数据类型,那么什么是方法签名,其实就是指方法的输入 ...

  6. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  7. c++中的数据类型

    1.数据类型简介 c++中数据类型分为两种:预定义类型和自定义数据类型. 预定义类型:整型(int 4个字节) 字符型 布尔型 (bool) 浮点型(4个字节) 空类型:关键字void,不能用于普通变 ...

  8. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  9. Javascript中的数据类型之旅

    虽然Javascript是弱类型语言,但是,它也有自己的几种数据类型,分别是:Number.String.Boolean.Object.Udefined.Null.其中,Object属于复杂数据类型, ...

随机推荐

  1. git 用户手册

    Git是一个分布式版本控制/软件配置管理软件,原来是linux内核开发者林纳斯·托瓦兹为了更好地管理linux内核开发而创立的.需要注意的是和GNU Interactive Tools,一个类似Nor ...

  2. html 基础之 <link>标签

    实例 链接一个外部样式表: <head> <link rel="stylesheet" type="text/css" href=" ...

  3. [Linked List]Copy List with Random Pointer

    Total Accepted: 53943 Total Submissions: 209664 Difficulty: Hard A linked list is given such that ea ...

  4. django 使用jquery ajax post数据问题

    django 开启了CSRF功能导致jquery ajax post数据报错 解决方法在post数据里引入csrfmiddlewaretoken: '{{ csrf_token }}'},同时需要在f ...

  5. 理解ThreadLocal(二)

    首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...

  6. js子页面获取父页面数据

    做页面预览的时候,数据没有存入数据库,但是要打开一个页面进行预览,询问众大婶,原来是这样来做. 1.父页面 <input type="text" id="name& ...

  7. myEclipse + phonegap-2.9.0 总跳出3个脚本提示

    环境:myEclipse + phonegap-2.9.0按照教程全部完毕后,浏览页面时,总会跳出3个脚本提示:1:gap:["Device","getDeviceInf ...

  8. VS2012常用快捷建(必备)

    1. 强迫智能感知:Ctrl+J:2.强迫智能感知显示参数信息:Ctrl-Shift-空格:3.格式化整个块:Ctrl+K+F4. 检查括号匹配(在左右括号间切换): Ctrl +]5. 选中从光标起 ...

  9. 什么是JS事件冒泡

    什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个 ...

  10. 100个linux站点

    (一) 文件下载 (二) 幽默娱乐 (三) 相关新闻 (四) 通用硬体 (五) 专用硬体 (六) 新手站点 (七) 图形/多媒体 (八) 游戏站点 (九) 网路杂志 (十) 入口(教育.链结) (十一 ...