c#中的数据类型简介(枚举)
C#中的数据类型简介(枚举)
枚举的定义
根据MSDN上给出的定义,枚举是⼀个指定的常数集,其基础类型可以是除Char外的任何整型。如果没有显式声明基础类型,则使⽤。 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=2,      //可以⽤基础数重定义默认值,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)4;        //赋值枚举值,然后转为枚举常量
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)6;            // 将整数转化为枚举常量
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)7, "G"));      //通过format⽅法格化将枚举值转为string
Console.WriteLine("Color Constant is :{0}", Enum.GetName(typeof(Color), (byte)8));        //通过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)4))
Console.WriteLine("the value 4's constant is {0}", Enum.Parse(typeof(Color),"4"));
else
Console.WriteLine("the 4 value is not define");
Color color2 = (Color)Enum.ToObject(typeof(Color), 4);        //通过ToObject⽅法将整数值转化为枚举常量
Console.WriteLine(color2);
Color color3;
if (Enum.TryParse("2", 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)enum函数
{
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();
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。