枚举定义的相关内容就不在此说了;这里说说枚举的常用操作
枚举与符号、值的转换
获取所有的符号名
FlagsAttribute特性的使用
对枚举组合(通过按位或符号“|”)运用switch
定义一个枚举用作后面的例子
enum EnumName{
Red = 1,
Green,
Blue = 4,
White = 8,
Black = 16
}
枚举与符号、值的转换
EnumName en = EnumName.Green;
//1.枚举转值
int enValueInt = (int)en; // enValueInt 被赋值为 2
string enValueStr = en.ToString("D"); // enValueStr 被赋值为 "2"
//2.值转枚举
EnumName em = (EnumName)8; // em 被赋值为 EnumName.White
em = (EnumName)Enum.Parse(typeof(EnumName), 4.ToString()); // em 被赋值为 EnumName.Blue
//3.符号转枚举
em = (EnumName)Enum.Parse(typeof(EnumName), "Blue"); // em 被赋值为 EnumName.Blue
获取所有的符号名
foreach (string s inEnum.GetNames(typeof(EnumName))) //通过 foreach 遍历枚举EnumName的定义
FlagsAttribute特性的使用
需要注意,枚举个元素的值除了1以外,必须是2的倍数,不能使用0,否则组合就得不到正确的值
EnumName em = EnumName.Red | EnumName.Blue | White;
Console.WriteLine(em); // 输出 13;
如果在EnumName定义的时候加上 Flags 特性,如:
[Flags]
enum EnumName{ .... }
那么以上输出将变为 Red, Blue, White
加了Flags特性以后可以通过 Console.Write((int)em) 的方式来输出数字值;
对枚举组合(通过按位或符号“|”)运用switch
Type t = typeof(em);
string[] items = Enum.GetNames(t);
foreach (string s in items)
{
EnumName n = (EnumName)Enum.Parse(t, s);
if ((em & n) > 0)
{
switch(n){
case EnumName.Red: Console.Write(n); break;
case EnumName.Green: Console.Write(n); break;
case EnumName.Blue: Console.Write(n); break;
case EnumName.White: Console.Write(n); break;
case EnumName.Black: Console.Write(n); break;
}
}
}