枚举
enum 关键字告诉编译器该类继承自抽象类 Enum,而程序员不必显式继承它。Enum 是 ValueType 的后代,旨在与不同的命名常量集一起使用。
public enum DaysOfWeek
{
Monday,
Tuesday,
}
你可以选择为每个(或其中一些)指定特定值:
public enum NotableYear
{
EndOfWwI = 1918;
EnfOfWwII = 1945,
}
在这个例子中,我省略了 0 的值,这通常是一种不好的做法。enum 将始终具有由显式转换 (YourEnumType) 0 生成的默认值,其中 YourEnumType 是你声明的 enume 类型。如果未定义值 0,则 enum 在启动时将没有定义的值。
enum 的默认底层类型是 int,你可以将基础类型更改为任何整数类型,包括 byte,sbyte,short,ushort,int,uint,long 和 ulong。下面是一个基础类型为 byte 的枚举:
enum Days : byte
{
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
另请注意,你只需使用强制转换即可转换为基础类型/从基础类型转换:
int value = (int)NotableYear.EndOfWwI;
出于这些原因,你最好在暴露库函数时检查 enum 是否有效:
void PrintNotes(NotableYear year)
{
if (!Enum.IsDefined(typeof(NotableYear), year))
throw InvalidEnumArgumentException("year", (int)year, typeof(NotableYear));
// ...
}