C# 枚举(详解)

枚举是一个值类型

枚举是一个值类型, 包含一组命名的常量,  枚举类型用 enum 关键字定义

public enum Color
{
    Red,
    Green,
    Blue    // 注意最后一个常量值没有逗号
}

可以声明枚举类型的变量, 如变量 c1, 用枚举类型的名称作为前缀,设置一个命名常量,来赋予枚举中的一个值

Color c1  = Color.Red;
Console.WriteLine( c1 );

// 控制台输出
// Red

运行程序, 控制台输出显示 Red, 这是枚举的常量值。

默认情况下, enum 的类型是 int。 这个基本类型可以改为其他整数类型 (byte、short、int 、带符号的 long 和 无符号变量)。

命名常量的值从0开始递增,但它们可以改为其他值:

public enum Color : short
{
    Red = 1,
    Green = 2,
    Blue = 3
}

使用强制类型转换可以把数字改为枚举值, 把枚举值改为数字。

Color c2 = (Color)2;

short number = (short) c2;

 

Flags 属性

还可以使用 enum 类型把多个选项分配给一个变量, 而不仅仅是一个枚举常量。为此,分配给常量的值必须是不同的位, Flags属性需要用枚举设置。

[Flags]
public enum DaysOfWeek
{
    Monday    = 0x1,
    Tuesday   = 0x2,
    Wednesday = 0x4,
    Thursday  = 0x8,
    Friday    = 0x10,
    Saturday  = 0x20,
    Sunday    = 0x40
}

DaysOfWeek 为每天定义了不同的值。 要设置不同的位, 可以使用 0x 前缀指定的 十六进制轻松完成, Flags 属性是编译器创建值的另一个字符串表示的信息, 例如给 DaysOfWeek 的一个变量设置值3, 结果 Monday ,如果使用 Flags 属性,结果就是 Tuesday 。 有了这个枚举声明, 就可以使用逻辑或运算符为一个变量指定多个值:

DaysOfWeek mondayAndWednesday = DaysOfWeek.Monday | DaysOfWeek.Wednesday;
Console.WriteLine( mondayAndWednesday );

// 控制台输出
// Monday , Tuesday

设置不同的位, 也可以结合单个位来包括多个值, 如 Weekend 的值 0x60 是用逻辑或运算符结合了 Saturday 和 Sunday 。Workday 则结合了从 Monday 到 Friday

的所有日子, AllWeek 用逻辑或运算符结合了 Workday 和 Weekend

[Flags]
public enum DaysOfWeek
{
    Monday    = 0x1,
    Tuesday   = 0x2,
    Wednesday = 0x4,
    Thursday  = 0x8,
    Friday    = 0x10,
    Saturday  = 0x20,
    Sunday    = 0x40,
    
    Weekend = Saturday | Sunday,
    Workday = 0x1f,
    AllWeek = Workday | Weekend
}

 

动态获得枚举类型的信息

Enum 类有时非常有助于动态获得枚举类型的信息。 枚举提供了方法来解析字符串, 获得相应的枚举常数, 获得枚举类型的所有名称和值。

 

Enum.TryParse

Color red;
if( Enum.TryParse<Color>("Red", out red) )
{
    Console.WriteLine( string.Format("successfully parsed {0}", red) );
}

// 控制台输出 
// Red

注意: Enum.TryParse<T>() 是一个泛型方法, 其中T是泛型参数类型。 

 

Enum.GetNames

该方法返回一个包含所有枚举名的字符串数组:

foreach( var day in Enum.GetNames( typeof(Color) ) )
{
    Console.WriteLine( day );
}

// 控制台输出
// Red
// Green
// Blue

 

Enum.GetValues

为了获得枚举的所有值, 可以使用 Enum.GetValues 。 Enum.GetValues 返回枚举值的一个数组。 为了获得整数值, 需要把它转换为枚举的底层类型, 为此应使用 foreach语句:

foreach( short val in Enum.GetValues( typeof(Color) ) )
{
    Console.WriteLine( val );
}

// 控制台输出
// 1
// 2
// 3

 

  • 15
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值