C#中的枚举类型
枚举类型提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。
例如,假设你需要定义一个变量,其值表示交通指示灯。 若要定义这些值,可以使用枚举类型,该类型是使用 enum 关键字声明的。
enum EnumLight { Red, Yellow, Green }
每个枚举类型都有一个基础类型,该基础类型可以是除 char 外的任何整型类型。 枚举元素的默认基础类型是 int。 枚举的已批准类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。若要声明另一整型类型的枚举(如 byte),则请在后跟该类型的标识符后使用冒号.
enum EnumLight : byte { Red, Yellow, Green }
在此枚举中,默认元素的序列从 1 开始,而不是 0。 但建议包括一个值为 0 的常量。用于指示一个初始的无效的枚举值。
如:
enum EnumLight : byte {None=0, Red, Yellow, Green }
枚举类型的基本数据类型,表示其内存中的存储方式。但将 enum 类型转换为整型,则必须使用显示转换。 例如,以下语句通过使用转换将 enum 转换为 int,从而将枚举器 Sun 赋值为 int 类型的变量。
int n = (int)EnumLight.Red;
可以将任意整数值分配给int类型的变量, 例如,代码行
EnumLight light = (EnumLight) 10
不会产生错误。
但后面的代码使用该值可能导致错误。
作为位标志的枚举类型
在C#中可以使用枚举类型来定义位标志,这使枚举类型的实例能够存储枚举器列表中定义的值的任何组合。
创建位标志枚举的方法是,应用System.FlagsAttribute属性并适当定义一些值,以便可以对这些值执行 AND、OR、NOT 和 XOR 按位运算。 在位标志枚举中,包括一个值为零(表示“未设置任何标志”)的命名常量。 如果零值不表示“未设置任何标志”,请勿为标志指定零值。
MS的示例:
[Flags]
enum Days
{
None = 0x00,
Sunday = 0x01,
Monday = 0x02,
Tuesday = 0x04,
Wednesday = 0x08,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
class TestClass
{
Days meetingDays = Days.Tuesday | Days.Thursday;
}
使用 System.Enum 方法来发现和操作枚举值
所有枚举都是System.Enum类型的实例。 不能从System.Enum中派生新类,但可以使用它的方法来发现有关枚举实例中操作值的信息。
string s = Enum.GetName(typeof(Days), 4);
Console.WriteLine(s);
Console.WriteLine("The values of the Days Enum are:");
foreach (int i in Enum.GetValues(typeof(Days)))
Console.WriteLine(i);
Console.WriteLine("The names of the Days Enum are:");
foreach (string str in Enum.GetNames(typeof(Days)))
Console.WriteLine(str);