枚举是用户定义的整数类型 。 创建枚举可以节省的大量的时间,减少许多麻烦。 使用枚举比使用无格式的整数至少有
如下2个优势:
- 如上所述, 枚举可以使代码更易于维护, 有助于确保给变量指定合法的、期望的值
- 枚举使代码更清晰, 允许用描述性的名称表示整数值, 而不是用含义模糊、变化多端的数来表示。
// 注意看这个枚举定义的位置(它的位置决定了它的作用域)
public enum TimeOfDay
{
Morning = 0,
Afternoon = 1,
Evening 2
}
class MyClass
{
static void Main()
{
WriteGreeting(TimeOfDay.Morning);
}
static void WriteGreeting(TimeOfDay timeOfDay)
{
swhitch(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;
}
}
}
在c#中, 枚举的真正强大之处是它们在后台会实例化为派生自基类 System.Enum 的结构。 这表示可以对他们调用方法,执行有用的任务。 注意因为 .Net Framework 的实现方式, 在语法上把枚举当成结构不会造成性能损失。 实际上,一旦代码编译好,枚举就称为基本类型, 与 int 和 float 类似。
还可以检索枚举的字符串表示,例如使用前面的 TimeOfDay 枚举:
TimeOfDay time = TimeOfDay.Afternoon;
Console.WriteLine( time.ToString() );
枚举还有一个骚操作, 可以从字符串中获取枚举值:
TimeOfDay time = (TimeOfDay) Enum.Parse( typeof(TimeOfDay) , "afternoon", true);
Console.WriteLine( (int)time );
这段代码说明了如何从字符串中获取枚举值, 并将其转换为整数。 要从字符串转换,需要使用静态的 Enum.Parse() 方法,
这个方法有3个参数。
- 要使用的枚举类型
- 要转换的字符串
- 指定在进行转换时是否忽略大小写。
注意: Enum.Parse() 方法实际上返回一个对象引用 ---- 我们需要把这个字符串显式转换为需要的枚举类型(这是一个拆箱操作的例子)。 对于上面的代码, 将返回1, 作为一个对象,应对与 TimeOfDay.Afternoon 的枚举值。在显式转换为 int时, 会再次生成1
System.Enum 上的其他方法可以返回枚举定义中,值的个数或列出值的名称等。 详细信息参见 MSDN文档