C#学习笔记 -- 枚举
枚举
枚举是开发者定义的类型, 与类、结构一样
-
与结构一样, 枚举是值类型, 因此直接存储他们的数据, 而不是分开存储成引用和数据
-
枚举只有一种类型的成员: 命名的整数值常量
enum TrafficL { Green, Red, Yellow }
-
每个枚举类型都有一个底层整数类型, 默认为int
-
每个枚举成员都被赋予一个底层类型的常量值
-
在默认情况下, 编译器对第一个成员赋值为0, 对每一个后续成员赋值都比前一个成员多1
比如此例, 编译器把int赋值给成员, 成员在栈中
enum TrafficLight { Green, Yellow, Red }
static void Main(string[] args) { TrafficLight t1 = TrafficLight.Green; TrafficLight t2 = TrafficLight.Yellow; TrafficLight t3 = TrafficLight.Red; Console.WriteLine($"{t1}, {(int) t1}"); Console.WriteLine($"{t2}, {(int) t2}"); Console.WriteLine($"{t3}, {(int)t3}"); //Green 0 Yello 1 Red 2 }
可以把枚举值付给枚举类型变量, 可以把成员字面量f赋给变量, 或者从另一个相同类型变量的变量复制值
static void Main(string[] args) { TrafficLight t1 = TrafficLight.Red; TrafficLight t2 = TrafficLight.Green; TrafficLight t3 = t2; Console.WriteLine(t1); Console.WriteLine(t2); Console.WriteLine(t3); //Red Green Green }
(1)设置底层类型和显式值
可以把冒号的类型名放在枚举名之后, 这样就可以使用int以外的整数类型, 类型可以是任何整数类型
enum TrafficLight : ulong { ... }
-
成员常量的值可以是底层类型的任何值
-
要显式地设定一个成员的值, 在枚举声明中的变量名之后使用初始化表达式
-
名称不能重复, 但值可以重复
enum TrafficLight { Green, Yellow, Red }
enum TrafficLight : int { Green = 0, Yellow = 1, Red = 2 }
(2)隐式成员编号
如果不初始化成员常量, 编译器将隐式地给他赋一个值, 规则如下
enum FaceCard { Jack = 11; //显式赋值 11 Queen; //12 King; //13 Ace; //14 NumberOfFaceCards = 4; //显式赋值 4 SomeOtherValue; //5 HightestFaceCard = Ace; //14 }
(3)枚举的成员
枚举只有单一的成员类型: 声明的成员常量
-
不能对成员使用修饰符, 他们都隐式地具有和枚举相同的可访问性
-
成员是静态的, 即使在没有该枚举类型的变量时也可以访问他们
(4)访问枚举成员
和所有的静态类型一样, 访问枚举的成员有两种方法
-
ExampleEnum.ExampleCons
-
使用
using static
enum TrafficLight { Green, Yellow, Red } using static TrafficLight; static void Main() { Console.WriteLine(Green); Console.WriteLine(Yellow); Console.WriteLine(Red); }
(5)枚举比较
枚举是一个独特的类型, 比较不同枚举类型的成员会导致编译错误
enum FirstEnum { Mem1, Mem2 }
enum SecondEnum { Mem1, Mem2 }
static void Main(string[] args) { if(FirstEnum.Mem1 < FirstEnum.Mem2) { Console.WriteLine("true"); } if(FirstEnum.Mem1 < SecondEnum.Mem2) //编译错误, 枚举类型不同 { Console.WriteLine("true"); } }
(6)doNET的枚举
C#的enum基于doNET的Enum类型, doNET Enum类型中静态方法
-
GetName, 以一个枚举类型对象和一个整数为参数, 返回相应的枚举成员的名称
-
GetNames方法以一个枚举类型对象位参数, 返回该枚举中的所有成员的名称
enum TrafficLight { Green, Yellow, Red }
static void Main(string[] agrs) { Console.WriteLine($"TrafficLight的第一个成员是: {Enum.GetName(typeof(TrafficLight), 1)}"); int i = 1; foreach (var name in Enum.GetNames(typeof(TrafficLight))) { Console.WriteLine($"TrafficLight的第{i++}个成员是: {name}"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律