C#枚举(Enum)小结
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
声明 enum 变量
声明枚举的一般语法:
enum <enum_name> { enumeration list };
其中,
- enum_name 指定枚举的类型名称。
- enumeration list 是一个用逗号分隔的标识符列表。
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.例如:
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
实例 下面的实例演示了枚举变量的用法: 实例 using System; public class EnumTest { enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void Main() { int x = (int)Day.Sun; int y = (int)Day.Fri; Console.WriteLine("Sun = {0}", x); Console.WriteLine("Fri = {0}", y); } } 当上面的代码被编译和执行时,它会产生下列结果: Sun = 0 Fri = 5
一个枚举的关联值或隐式地、或显示地被赋值。如果枚举成员的声明中具有 constant-expression 初始值设定项,则该常量表达式的值(它隐式转换为枚举的基础类型)就是该枚举成员的关联值。如果枚举成员的声明不具有初始值设定项,则它的关联值按下面规则隐式地设置:
如果枚举成员是在枚举类型中声明的第一个枚举成员,则它的关联值为零。否则,枚举成员的关联值是通过将前一个枚举成员(按照文本顺序)的关联值加 1 得到的。这样增加后的值必须在该基础类型可表示的值范围内;否则,会出现编译时错误。有关枚举类型成员关联值赋值案例,参考下例:
using System; namespace Test { public enum Day : uint //如果不设置数据类型,默认为 int { Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat,Sun} class EnumType { public static void Main(string[] args) { Console.WriteLine(ChooseDay(Day.Sun)); Console.WriteLine(ChooseDay(Day.Mon)); } static string ChooseDay(Day d) { string tmp = string.Empty; switch (d) { case Day.Mon: tmp = string.Format("你选择一周中的第{0}天(即周一),工作",(uint)d); break; case Day.Tue: tmp = string.Format("你选择一周中的第{0}天(即周二),工作", (uint)d); break; case Day.Wed: tmp = string.Format("你选择一周中的第{0}天(即周三),工作", (uint)d); break; case Day.Thu: tmp = string.Format("你选择一周中的第{0}天(即周四),工作", (uint)d); break; case Day.Fri: tmp = string.Format("你选择一周中的第{0}天(即周五),工作", (uint)d); break; case Day.Sat: tmp = string.Format("你选择一周中的第{0}天(即周六),休息", (uint)d); break; case Day.Sun: tmp = string.Format("你选择一周中的第{0}天(即周日),休息", (uint)d); break; default: tmp = "不合法"; break; } return tmp; } } } 复制代码 //Execation Result 你选择一周中的第7天(即周日),休息 你选择一周中的第1天(即周一),工作 请按任意键继续. . .
调用枚举
public enum CommunicationState { /// <summary> /// 位置状态 /// </summary> Unknown = 0, /// <summary> /// 等待用户登录 /// </summary> WaitforUser = 1, /// <summary> /// 等待用户输入密码 /// </summary> WaitforPass = 2, /// <summary> /// 等待用户指令 /// </summary> WaitforCmd = 3, /// <summary> /// 接收数据中 /// </summary> Receiving = 4, /// <summary> /// 断开连接 /// </summary> Disconnected = 5 }
private CommunicationState m_ComState = CommunicationState.Unknown;
this.m_ComState = CommunicationState.WaitforUser;