使用英语阅读

通过


枚举类型(C# 参考)

枚举类型(或枚举类型)是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定 枚举成员的名称:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

默认情况下,枚举成员的关联常量值属于类型 int;它们以零开头,并按定义文本顺序增加一个。 可以将任何其他 整型数值 类型显式指定为枚举类型的基础类型。 还可以显式指定关联的常量值,如以下示例所示:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

不能在枚举类型的定义中定义方法。 若要将功能添加到枚举类型,请创建 扩展方法

枚举类型的 E 默认值是表达式 (E)0生成的值,即使零没有相应的枚举成员也是如此。

可以使用枚举类型来表示一组互斥值或选项组合中的选项。 若要表示选项的组合,请将枚举类型定义为位标志。

作为位标志的枚举类型

如果希望枚举类型表示选项的组合,请为这些选项定义枚举成员,以便单个选择是位字段。 也就是说,这些枚举成员的关联值应该是 2 的幂。 然后,可以使用 按位逻辑运算符 |& 分别组合选项或相交选项组合。 若要指示枚举类型声明位字段,请向其应用 Flags 属性。 如以下示例所示,还可以在枚举类型的定义中包含一些典型组合。

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

有关详细信息和示例,请参阅 System.FlagsAttribute API 参考页和 非独占成员以及 API 参考页的 System.Enum Flags 属性部分。

System.Enum 类型和枚举约束

System.Enum 类型是所有枚举类型的抽象基类。 它提供了许多方法来获取有关枚举类型及其值的信息。 有关详细信息和示例,请参阅 System.Enum API 参考页。

可以在 System.Enum 基类约束(称为 枚举约束)中使用,以指定类型参数是枚举类型。 任何枚举类型也满足 struct 约束,该约束用于指定类型参数是不可为 null 的值类型。

转换

对于任何枚举类型,枚举类型与其基础整型之间存在显式转换。 如果将枚举值 转换为 其基础类型,则结果是枚举成员对应的整数值。

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Enum.IsDefined使用该方法确定枚举类型是否包含具有特定关联值的枚举成员。

对于任何枚举类型,都存在分别与 System.Enum 类型的装箱和取消装箱相互转换。

C# 语言规范

有关更多信息,请参阅 C# 语言规范的以下部分:

另请参阅