列舉

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));

    // ...
}