枚举

enum 关键字告诉编译器该类继承自抽象类 Enum,而程序员不必显式继承它。EnumValueType 的后代,旨在与不同的命名常量集一起使用。

public enum DaysOfWeek
{
    Monday,
    Tuesday,
}

你可以选择为每个(或其中一些)指定特定值:

public enum NotableYear
{
   EndOfWwI = 1918;
   EnfOfWwII = 1945,
}

在这个例子中,我省略了 0 的值,这通常是一种不好的做法。enum 将始终具有由显式转换 (YourEnumType) 0 生成的默认值,其中 YourEnumType 是你声明的 enume 类型。如果未定义值 0,则 enum 在启动时将没有定义的值。

enum 的默认底层类型是 int,你可以将基础类型更改为任何整数类型,包括 bytesbyteshortushortintuintlongulong。下面是一个基础类型为 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));

    // ...
}