C#枚举教程展示了如何在C#语言中使用枚举类型。
枚举类型(也称为枚举或枚举)是由一组命名值组成的数据类型。已声明为具有枚举类型的变量可以分配任何枚举数作为值。枚举使代码更具可读性。
我们用enum关键字定义一个枚举类型。
enum Difficulty
{
Easy,
Normal,
Hard,
VeryHard
}
默认情况下,枚举成员的关联常量值是int类型。它们从零开始,然后按照定义文本顺序加一。可以定义其他类型,包括byte、sbyte、short、ushort、uint、long和ulong。
枚举是值类型;它们是在堆栈上而不是在堆上创建的。
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#教程。
