枚举
时间:2011-01-03 来源:月光小提琴
(2)枚举成员
枚举成员是该枚举类型的命名常数。每个枚举成员名称唯一且均具有相关联的常数值,此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。
示例:
public enum TimeofDay:uint
{
Morning=-3,
Afternoon=-2,
Evening=-1
}
产生编译时错误,原因是常数值 -1、-2 和 –3 不在基础整型 uint 的范围内。
注意:为所有的每句成员加上注释是很必要的,否则别人看到你的成员里面那么多不认识的单词甚至缩写有多么痛苦……
(3)枚举成员赋值
规则:允许多个枚举成员有相同的值,允许无顺序地定义成员值,没有显式赋值的成员的值默认为上一个成员的值+1(第一个成员如果没赋值的话默认就是0)。另外,枚举值都不能超过它的基础类型范围。
示例
public enum Color
{
red = 1,
green,
orange = 1,
grey = 5,
purple
}
上面green的值为2,而purple的值则为6。 red和orange同为1。
注意:正是由于默认+1这样的规则,建议每个成员都手动赋值,以免出现程序写到一半,从前面改动或者增加成员的时候,后面的成员默认值都会改变,这就麻烦了。
(4)枚举类型与基础类型的转换
基础类型不能隐式转换为枚举类型
枚举类型也不能隐式转换为基础类型
示例:
public enum Number
{
a,
b
}
class Test
{
public static void Main()
{
int i = Number.a;//错误,要强制类型转换(int)Number.a
Number n;
n = 2//又错误,要强制类型转换(Number)2
}
}
(5)枚举类型的使用
switch(timeofDay) //switch中的使用
{
case TimeofDay.Morning:
Console.WriteLine("good morning");
break;
//……其他的省略啦
}
int hashCode = timeofDay.Morning.GetHashCode();//得到枚举成员的值
string str = timeofDay.Morning.toString();//得到枚举成员的名字
string enumParseStr = Enum.Parse(typeof(timeofDay) , hashCode.ToString()).toString();//将枚举的值转换成对应的名字
int enumParseInt = Convert.ToInt32(Enum.Parse(typeof(timeofTime), str));//将枚举的名字转换成对应的值