当前位置:首页 > 技能相关 > C#与C++ > 正文内容

c#高级编程 枚举 (二)

admin2年前 (2023-01-29)C#与C++2370 修订时间:2023-01-30 09:26:42

枚举是一个值类型,包含一组命名的常量,如这里的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, 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 | SundayWorkday = 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<Color>("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 (shortval in Enum.GetValues(typeof(Color)))
{
WriteLine(val);
}


 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=284

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。