有时我们希望变量提取的是一个固定集合中的值,此时就可以使用枚举类型。枚举允许定义一个类型,其中包含提高的限定值集合中的一个值
枚举的定义:枚举使用enum关键字来定义,如:
enum 枚举名
{
枚举成员1,
枚举成员2,
........
枚举成员n
}
接着就是声明这个新类型(枚举类型)的变量:
枚举名 变量名;
并赋值:
变量 = 枚举名.枚举成员;
枚举使用一个基本类型来存储。枚举类型可以提取的每个值都存储位该基本类型的一个值,在默认情况下,该类型为int。在枚举声明中添加类型,就可以指定其他基本类型:
enum 枚举名:数据类型
{
枚举成员1,
枚举成员2,
........
枚举成员n
}
枚举的基本类型可以是byte,sbyte,shotr,ushort,int,uint,long和ulong
在默认情况下,每个值都会根据定义的顺序(从0开始),自动赋给对应的基本类型值。这就意味着枚举成员1的值是0,枚举成员2的值是2.......也可以使用=运算符重写枚举成员的值,如:
enum 枚举名:数据类型
{
枚举成员1 = 值1,
枚举成员2,
枚举成员3 = 枚举成员1 ,
......
}
枚举中可以使用一个值作为另一个枚举的值,多个枚举成员指定相同的值。如上例中的“枚举成员3 = 枚举成员1 ”就是用枚举成员1的值来指定枚举成员3的值
没有赋值的枚举成员的值都会自动获得一个初始值,这里使用的值是从比最后一个明确声明的枚举成员的值大1开始序列。如上例中枚举成员2的值就是枚举成员1的值+1。
虽然可以使用一个枚举成员给另外一个枚举成员赋值,但是要注意的是枚举中以迂回方式赋值就可能产生错误,如:
enum typaname:int
{
value1 = value2,
value2 = value1
}
实例:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
enum meiju : byte//创建一个枚举变量meiju,并指定其成员的数据类型为byte
{
noth = 5,//值为5的枚举的成员
south,//此成员的值将是在noth的值上加1,即6
east = south,//此成员的值与south的值相同,即6
west//此成员的值值是在east的值上加1
}
class Program
{
static void Main(string[] args)
{
int mymj1 = (int)meiju.noth;//声明一个变量mymj1并赋值,其中使用显示转换获取noth成员的值
int mymj2 = (int)meiju.south;
int mymj3 = (int)meiju.east;
int mymj4 = (int)meiju.west;
Console.WriteLine("枚举的第一个成员的值为:{0} \n枚举的第二个成员的值为:{1} \n枚举的第三个成员的值为:{2} \n枚举的第四个成员的值为:{3}", mymj1, mymj2, mymj3, mymj4);//输出这2个变量
Console.ReadKey();
}
}
}
输出结果:
枚举的第一个成员的值为:5
枚举的第二个成员的值为:6
枚举的第三个成员的值为:6
枚举的第四个成员的值为:7