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#教程。