开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C#枚举

C#枚举教程展示了如何在C#语言中使用枚举类型。

枚举类型(也称为枚举或枚举)是由一组命名值组成的数据类型。已声明为具有枚举类型的变量可以分配任何枚举数作为值。枚举使代码更具可读性。

我们用enum关键字定义一个枚举类型。

enum Difficulty
{
    Easy,
    Normal,
    Hard,
    VeryHard
}

默认情况下,枚举成员的关联常量值是int类型。它们从零开始,然后按照定义文本顺序加一。可以定义其他类型,包括bytesbyteshortushortuintlongulong

枚举是值类型;它们是在堆栈上而不是在堆上创建的。

C#枚举简单例子

下面是一个enum类型的简单例子。

Day day = Day.Monday;

if (day == Day.Monday)
{
    Console.WriteLine("It is Monday");
}

Console.WriteLine(day);

foreach (int i in Enum.GetValues(typeof(Day)))
{
    Console.WriteLine(i);
}

enum Day
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

我们为工作日创建一个枚举。

enum Day
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

枚举是使用enum关键字创建的。星期一、星期二…裸词实际上存储数字0..6。

Day day = Day.Monday;

我们有一个名为day的变量,它是枚举类型Day。它被初始化为星期一。

if (day == Day.Monday)
{
    Console.WriteLine("It is Monday");
}

这段代码比将日期变量与某个数字进行比较更具可读性。

Console.WriteLine(day);

此行将星期一打印到控制台。

foreach (int i in Enum.GetValues(typeof(Day)))
{
    Console.WriteLine(i);
}

此循环将0..6打印到控制台。我们获得了enum值的基础类型。对于计算机,enum只是一个数字。typeof是用于获取类型的System.Type对象的运算符。GetValues方法需要它。此方法返回指定枚举值的数组。foreach关键字逐个元素遍历数组并将它们打印到终端。

$ dotnet run
It is Monday
Monday
0
1
2
3
4
5
6

我们可以为enum成员提供我们自己的值。

foreach (int i in Enum.GetValues(typeof(Day)))
{
    Console.WriteLine(i);
}

enum Day
{
    Monday = 10,
    Tuesday = 11,
    Wednesday = 12,
    Thursday = 13,
    Friday = 14,
    Saturday = 15,
    Sunday = 16
}

在示例中,我们为Day枚举的成员提供值10到16。

$ dotnet run
10
11
12
13
14
15

不应使用以下示例;它只是阐明了enum类型是如何工作的。

foreach (int i in Enum.GetValues(typeof(Days)))
{
    Console.WriteLine(i);
}

enum Days
{
    Monday,
    Tuesday,
    Wednesday = 8,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

我们从enum成员的默认值开始,然后我们将Wednesday成员设置为八。下一个成员Thursday设置为九等。

$ dotnet run
0
1
8
9
10
11
12

C#为成员枚举不同类型

在下一个示例中,我们更改枚举成员的数据类型。

Season s1 = Season.Spring;
Season s2 = Season.Autumn;

Console.WriteLine(s1);
Console.WriteLine(s2);

Console.WriteLine("----------------------");

Console.WriteLine(s1.GetType());
Console.WriteLine(Enum.GetUnderlyingType(s1.GetType()));

enum Season : byte
{
    Spring = 1,
    Summer = 2,
    Autumn = 3,
    Winter = 4
}

我们有Season枚举。成员值设置为byte类型。

$ dotnet run
Spring
Autumn
----------------------
Season
System.Byte

C#枚举转换

可以在枚举类型和它的基础整数类型之间进行显式转换。

var p1 = Priority.Minor;

Console.WriteLine($"Integral value of {p1} is {(int) p1}");

var p2 = (Priority) 1;
Console.WriteLine(p2);

var p3 = (Priority) 2;
Console.WriteLine(p3);

enum Priority
{
    Minor,
    Major,
    Critical
}

示例中有三个显式转换。

Console.WriteLine($"Integral value of {p1} is {(int) p1}");

在此代码行中,我们使用(int)转换将p1成员类型转换为其类型。

var p2 = (Priority) 1;
Console.WriteLine(p2);

这里我们将整数值转换为成员类型。

$ dotnet run
Integral value of Minor is 0
Major
Critical

C#枚举标志

使用Flags属性,我们可以将枚举转换为位域。然后它可以用作一组标志。(这些enum成员的关联值应该是2的幂。)

这样枚举就可以表示选择的组合。我们可以使用按位逻辑运算符|&来组合选择或相交选择的组合。

var readWrite = Permissions.Read | Permissions.Write;
Console.WriteLine(readWrite);

[Flags]
enum Permissions
{
    Execute = 0b_0000_0001,
    Write = 0b_0000_0010,
    Read = 0b_0000_0100
}

在示例中,我们使用|运算符定义读写权限。

$ dotnet run 
Write, Read

C#枚举.IsDefined

Enum.IsDefined方法检查指定的枚举中是否存在给定的整数值或其名称作为字符串。

Console.WriteLine(Enum.IsDefined(typeof(Priority), 0));
Console.WriteLine(Enum.IsDefined(typeof(Priority), 4));

Console.WriteLine("-------------");

Console.WriteLine(Enum.IsDefined(typeof(Priority), "Critical"));
Console.WriteLine(Enum.IsDefined(typeof(Priority), "Medium"));

Console.WriteLine("-------------");

Console.WriteLine(Enum.IsDefined(typeof(Priority), Priority.Major));
Console.WriteLine(Enum.IsDefined(typeof(Priority), Priority.Minor | Priority.Critical));

[Flags]
enum Priority
{
    Minor = 1,
    Major = 2,
    Critical = 4
}

在示例中,我们使用Enum.IsDefined方法检查Priority枚举中是否存在某些值。

$ dotnet run
False
True
-------------
True
False
-------------
True
False

在本文中,我们使用了C#中的枚举。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C#枚举

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏