C#类和对象(七)——枚举

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

public enum Color

{

Red,

Green,

Blue

}

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

Color c1 = Color. Red;

WriteLine( c1);

    运行程序,控制台输出显示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;

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

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

[Flags]

public enum DaysOfWeek

{

Monday = 0x1,

Tuesday = 0x2,

Wednesday = 0x4,

Thursday = 0x8,

Friday = 0x10,

Saturday = 0x20,

Sunday = 0x40

}

    有了这个枚举声明,就可以使用逻辑或运算符为一个变量指定多个值:

DaysOfWeek mondayAndWednesday = DaysOfWeek. Monday | DaysOfWeek. Wednesday;

WriteLine( mondayAndWednesday);

    运行程序,输出日期的字符串表示:

Monday, Wednesday

    设置不同的位,也可以结合单个位来包括多个值,如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

}

    有了这些代码,就可以把DaysOfWeek.Weekend直接分配给变量,指定用逻辑或运算符结合DaysOfWeek.

Saturday和DaysOfWeek.Sunday的单个值,也可以得到相同的结果。输出会显示Weekend的字符串表示。

DaysOfWeek weekend = DaysOfWeek. Saturday | DaysOfWeek. Sunday;

WriteLine( weekend);

    使用枚举,类Enum有时非常有助于动态获得枚举类型的信息。枚举提供了方法来解析字符串,获得相应的枚举常数,获得枚举类型的所有名称和值。下面的代码片段使用字符串和Enum.TryParse来获得相应的Color值:

Color red;

if (Enum. TryParse(" Red", out red))

{

WriteLine($" successfully parsed {red}");

}  

注意:Enum.TryParse<T>()是一个泛型方法,其中T是泛型参数类型。这个参数类型需要用方法调用定义。

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

foreach (var day in Enum.GetNames(typeof( Color)))

{

WriteLine( day);

}

运行应用程序,输出如下:

Red

Green

Blue

 

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

foreach (short val in Enum.GetValues( typeof( Color)))

{

WriteLine( val);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掌控自身命运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值