枚举
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));
// ...
}