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. Jvm垃圾回收堆内存变化过程

    当Eden区域满时,触发minor GC,垃圾收集器把Eden区域中的不可达对象标记出来.第一次执行minor GC时Survivor 1与Survivor 2均为空: Eden中的不可达对象占用的内 ...

  2. EF 事务处理 (InnoDB Engine的MySQL表也可以)

    备忘 1. 亲测(可以嵌套使用) using (TransactionScope scope = new TransactionScope()) { //操作1 XXEntities.Current. ...

  3. android——字体颜色跟随状态改变

    TextView的字体颜色也可以和ImageView的background一样,跟随状态发生改变.只需要自定义一下字体颜色.在color文件夹下面,新建一个颜色文件的xml. OK ,这就完成 了. ...

  4. 【常用小命令】解决windows下有些文件文件名识别不了导致删除不了的问题

    在百度上找的解决方案哈,只为自己存档一份. 因为发现现在从csdn上下载的文件都是“.pdf_”格式,下载2个文件,将一个文件格式改成 “.pdf”,另一个文件就扔回不了回收站了, 所以没有办法就找各 ...

  5. GoEasy实现web实时推送过程中的自动补发功能

    熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...

  6. GPS坐标转换

    由于经常涉及到GPS程序的编写,现在貌似这个GPS是越来越火,越来越多的朋友在编写GPS程序,估计是个人都会遇到这个GPS坐标转换的问题,很惭愧的是,作为一个测量专业出身的学生,我还得时不时的要把这些 ...

  7. SQL Server 控制锁升级

    背景知识: 锁升级的路线图.行--> 页 --> 区(extent)-->区(表分区)--> 表: alter table 控制锁的升级行为: 1.table SQL Serv ...

  8. Application值传递。

    1.layout下面的布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...

  9. QT GUI(主)线程与子线程之间的通信——使用跨线程的信号槽

    在主线程上,可以控制子线程启动,停止,清零 如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字. 程序截图: 上代码: #include <QtGui> #inc ...

  10. 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤

    原文 http://www.cnblogs.com/2356/archive/2009/10/27/1590565.html 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤 ...