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. PropertyGrid—添加属性Tab

    零.引言 PropertyGrid用来显示和编辑对象的属性,前面已经简单介绍了如何使用该控件和提供不同的属性编辑方法.前面主要讲如何使用该控件,但有时,该控件无法满足我们的需求,就需要对其进行扩展.本 ...

  2. C# 多线程的坑 之 代码变序

    英文好的,可跳过,直接打开底部的“参考“链接. 代码变序--reordering of memory operations 大概4年前,阅读了这篇文章后http://www.albahari.com/ ...

  3. synchronized关键字的用法

    synchronized用于给方法或者块加锁用的,只有获得该对象或者块的锁的对象才能够执行里面的代码,否则将阻塞在那里,等待该锁被释放,然后获得该锁继续执行.比如下面模拟售票的代码: /** * 模拟 ...

  4. SQL查询语句47题

    select * from student select * from score --select * from grade select * from course select * from t ...

  5. IRP 与 派遣函数

    什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I ...

  6. ORA-01034/ORA-27101解决

    sql> shutdown immediate 后就无法进行任何操作了,重新通过sqlplus不能登录,提示ORA-01034和ORA-27101错误 解决,以下全部在cmd中: 1. 启动or ...

  7. 安装windows7和ubuntu双系统后引导项设置

    win7系统,U盘安装ubuntu,在选择[安装启动引导器的设备]时,1.如果你选择的是/dev/sda,即整个硬盘,他会将启动引导器使用grub进行系统引导,而不再使用windows loader, ...

  8. Entity Framewor中的 Migration

    http://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx = Code bas ...

  9. gdal vc++ 配置说明

      1在VC中,打开菜Tool-Option,在Directories页面中的Library files中和Include files中分别添加GDAL的LIB文件目录和INCLUDE文件目录2打开菜 ...

  10. HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern)

    观察者模式:定义了对象之间一对多的依赖关系,这样一来,当一个对象的状态发生改变时,它的依赖者将会受到通知并且自动更新. 有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事,对象甚至在运行时可以 ...