枚举

枚举属于值类型,用来表示一个或多个选项。

枚举的定义

语法

[可见性修饰符] enum [:基础类型]
{
    枚举项 [=值]
}

枚举继承自System.Enum。 基础类型可以是各种整数类型,默认是System.Int32。 枚举项的值默认从0开始,下一项为上一项+1。 枚举值可以有相同的。

颜色枚举

public enum Color{
    Red,
    Green,
    Blue
}

枚举的使用

使用枚举

Color c = Color.Red;

枚举和整数的转换

Color c = Color.Red;
int value = (int)c;

Color c2 = (Color)100;

Color c3 = 0;

可以将任意枚举值显示转换成整数。 可以将任意整数显示转换为枚举,即使结果不再其枚举范围内。

枚举的默认值

Color c;

枚举的默认值是0.

0可以隐式转换成任意枚举。

建议提供枚举值为0的枚举项,否则,可能导致值不再枚举范围内。

枚举和字符串的转换

枚举转换成字符串

Color c = Color.Red;
String s = c.ToString();//"Red"

Color c2 = (Color)100;
String s2 = c2.ToString();//"100"

不在范围的枚举转换成字符串时是整数。 如果有多个枚举项值相同,输出的字符串时最后定义的那项。

字符串转换成枚举

Color c2 = (Color)Enum.Parse(typeof(Color),"Red");//Color.Red

位枚举

枚举可以使用Flags特征进行修饰,说明枚举可以取其中的多个值进行按位组合。

辅助键枚举

[Flags]
public enum ModifierKeys{
    None = 0,
    Shift = 0x1,
    Ctrl = 0x2,
    Alt = 0x4,
    All = Shift | Ctrl | Alt
}

位枚举的命名使用s结尾 位枚举的选项分别占不同的位(2的n次方),这样才可以按照位进行组合。 可以有其他组合选项。

使用位枚举

ModifierKeys keys = ModifierKeys.Shift | ModifierKeys.Alt;
//判断某一项是否设置
bool isSet = (keys & ModifierKeys.Shift) != 0;

位枚举使用|运算符进行组合。 通过&来进行判断

位枚举和字符串的转换

位枚举转换成字符串

ModifierKeys keys = ModifierKeys.Shift | ModifierKeys.Alt;
string s = keys.ToString();//"Shift, Alt"

ModifierKeys keys2 = ModifierKeys.Shift | ModifierKeys.Alt | ModifierKeys.Ctrl;

string s2 = keys2.ToString();// "All"

ModifierKeys key3 = (ModifierKeys)100;
string s3 = keys3.ToString();//"100"

优先使用枚举值的完全匹配。 然后使用多个枚举选项的组合使用逗号分割,由小到大排列。 如果不匹配输出数字。

字符串转换成位枚举

ModifierKeys keys = (ModifierKeys)Enum.Parse(typeof(ModifierKeys),"All");

ModifierKeys keys2 = (ModifierKeys)Enum.Parse(typeof(ModifierKeys),"Alt,Shift");

ModifierKeys keys3 = (ModifierKeys)Enum.Parse(typeof(ModifierKeys),"1");

可以是枚举项的完全匹配。 可以是多个枚举逗号分割的选项。 可以是整数。

枚举的作用

枚举主要是为了消除各种已数字定义的值,使其更具可读性。

枚举的解析和输出格式非常不友好,因此只适用于内部使用,而不同适合由用户直接输入。

枚举和常量/只读静态变量

通过为类型定义多个常量/只读静态变量,也可以实现类似于枚举的功能。