的值。不仅如此,还可以给值指定易于记忆的名称。如果在代码的某个地方,要试图把一个不在可
接受范围内的值赋予枚举的一个实例,编译器就会报告一个错误。
从长远来看,创建枚举可以节省大量时间,减少许多麻烦。使用枚举比使用无格式的整数至少
有如下3个优势:
● 如上所述,枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。
● 枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊、变化多端的数
来表示。
● 枚举也使代码更易于键入。在给枚举类型的实例赋值时,Visual Studio .NET IDE会通过
IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可选
的值。
可以定义如下的枚举:
public enum TimeofDay
{
Morning = 0,
Afternoon = 1,
Evening = 2
}
本例在枚举中使用一个整数值,来表示一天的每个阶段。现在可以把这些值作为枚举的成员来
访问。例如,TimeofDay.Morning返回数字0。使用这个枚举一般是把合适的值传送给方法,并在
Switch语句中迭代可能的值。
class EnumEXample
{
public static int Main()
{
WriteGreeting(TimeofDay.Morning);
return 0;
}
static Void WriteGreeting(TimeofDay timeofDay)
{
switch(timeofDay)
{
case timeofDay.morning:
Console.WriteLine("Good Morning!");
break;
case TimeofDay.Afternoon:
Console.WriteLine("Good afternoon!");
break;
case TimeofDay.Evening:
Console.WriteLine("Good evening!");
break;
default:
Console.WriteLine("Hello!");
break;
}
}
}
在钾中,枚举的真正强大之处是它们在后台会实例化为派生于基类system,Enm的结构。这
表示可以对它们调用方法,执行有用的任务。注意因为.NET FrameWork的执行方式,在语法上把枚
举当做结构是不会造成性能损失。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。
可以获取枚举的字符串表示,例如使用前面的仂饨0fDay枚举:
TimeofDay time = TimeofDay.Afternoon;
Console.WriteLine(time.ToString());
会返回字符串Afternoon。
另外,还可以从字符串中获取枚举值:
TimeofDay time2 = (TimeofDay) Enum.Parse(typeof(TimeofDay),"afternoon", true);
Console.WriteLine((int)time2);
这段代码说明了如何从字符串获取枚举值,并转换为整数。要从字符串中转换,需要使用静态
的Enum,Parse()方法,这个方法带3个参数。第1个参数是要使用的枚举类型,其语法是关键字typeof
后跟放在括号中的枚举类名,第2个参数是要转换的字符串,第3个参数是一个bool,指定在进行转换时是否忽略大小写。最后,注意Enun。Parse()方法实际上返回一个对象引用——我们需要把这个字符串显式转换为需要的枚举类型(这是一个拆箱操作的例子)。对于上面的代码,将返回1,作为一个对象,对应于TimeofDay.Aamoon的枚举值。在显式转换为int时,会再次生成1。system,Enun上的其他方法可以返回枚举定义中的值的个数或列出值的名称等。详细信息参见MsDN文档。