public enum MyEnum
{
Monday = 1,
Tuesday,
Wednesday,
//...
}您可以将枚举视为将常量映射到某些基础值的便捷方法。上面定义的枚举声明一周中每一天的值,并以开头1。Tuesday随后将自动成为映射到2,Wednesday要3等
默认情况下,枚举int用作基础类型并从0开始,但是您可以使用以下任何整数类型:byte, sbyte, short, ushort, int, uint, long, or ulong,并且可以为任何项目指定显式值。如果显式指定了某些项,但没有明确指定,则最后定义的项之后的每个项将增加1。
我们将通过将其他一些值强制转换为MyEnum来使用此示例,如下所示:
MyEnum instance = (MyEnum)3; // 名为“ instance”的变量得到一个 //MyEnum.Wednesday的值,它映射到3。 int x = 2; instance = (MyEnum)x; // 现在'instance'的值为MyEnum.Tuesday
另一个有用但复杂的枚举类型称为Flags。通过用属性装饰枚举Flags,可以一次为一个变量分配多个值。请注意,在执行此操作时,必须以2为底的表示形式明确定义值。
[Flags]
public enum MyEnum
{
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}现在,您可以一次比较多个值,或者使用按位比较,或者如果使用的是.NET 4.0或更高版本,则可以使用内置Enum.HasFlag方法。
MyEnum instance =MyEnum.Monday| MyEnum.Thursday; // 实例的值现在为
// *两个*星期一和星期四,
// 用0100表示(以二进制表示)。
if (instance.HasFlag(MyEnum.Wednesday))
{
// 它没有,所以跳过了该块
}
else if (instance.HasFlag(MyEnum.Thursday))
{
// 确实如此,所以执行了该块
}由于Enum类是的子类System.ValueType,因此将其视为值类型,并按值而不是按引用传递。基础对象是在堆上创建的,但是当您将枚举值传递给函数调用时,使用枚举的基础值类型(通常为System.Int32)的值的副本将被推入堆栈。编译器跟踪此值与在堆栈上创建的基础对象之间的关联。有关更多信息,请参见ValueType类(系统)(MSDN)。