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. mysql配置的讲解 mysql的root密码重置 mysql的登录

    一,MySQL配置的讲解 port  默认mysql端口 socket  用于服务器端和客户端通信的套连接文字 skip-locking 取消文件系统的外部锁 key_buffer_size  索引缓 ...

  2. pl/sql连接远程服务器

    1.oracle提供了instantclient,下载instantclient-basic-win32-10.2.0.4.zip,将包解压存放到本地,如:D:\STUDY\instantclient ...

  3. HTML5 自定义属性 data-*介绍

    在HTML5之前HTML4我们也可以自定义属性通过setAttribute去设置或者直接写在HTML标签里面那么HTML5新增data-*(*可以替换成你喜欢的任意名字)属性有什么用呢? 更便的捷操作 ...

  4. auto 和 decltype (C++11 新增)

    红色字体为个人推断,可信度自辨. 蓝色字体为重点. auto类型说明符:使用auto时,编译器会分析表达式,并自动推算出变量所属类型.*auto变量必须有初值 原理:编译器通过 初值 来判断auto变 ...

  5. String, StringBuilder 与StringBuffer的区别与联系

    1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBu ...

  6. deepin添加新的打开方式软件

    在/usr/share/applications文件夹中,你可以先打开一个其他的软件比如geany,然后根据geany的配置配置你所需要的新软件

  7. 使用jquery处理ajax返回XML

    JS代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...

  8. MYSQL 的 3 类数据类型

    1.数据型: bool,float,double decimal(M,D) M是小数位数(精度)的总数,D是小数点(标度)后面的位数.DECIMAL整数最大位数(M)为65. smallint 小的整 ...

  9. 执行引擎子系统——JVM之五

    一.JVM通过执行引擎来完成字节码的执行,在执行过程中JVM采用的是自己的一套指令系统,每个线程在创建后,都会产生一个程序计数器(pc)和栈(Stack). pc:存放了下一条将要执行的指令: Sta ...

  10. stream~filestream

    http://blog.csdn.net/feliciafay/article/details/6157356 http://blog.csdn.net/feliciafay/article/deta ...