使用带有char枚举的Enum.Parse

时间:2018-02-20 16:50:11

标签: c#

public enum Color
{
    Red = 'R',
    Blue = 'B',
    Green = 'G',
    Yellow = 'Y',
}

Color color = (Color)Enum.Parse(typeof(Color), "R");

Hello社区!

我尝试使用char枚举解析字符串值,但它会抛出一个System.ArgumentException。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

首先要理解的是,C#不支持char作为枚举的基础类型。声明这样的枚举是违法的:

public enum Color : char

Color枚举的基础类型实际上是int,因为其声明中未指定其他类型。

但是,

C#将允许您将字符文字指定为枚举成员的值 - 通过将其转换为相应的ASCII整数。因此,您的Color枚举声明与此相同:

public enum Color
{
    Red = 82,
    Blue = 66,
    Green = 71,
    Yellow = 89,
}

如果从整数值的角度考虑枚举,问题会变得更加清晰。字符串"R"Color.Red之间没有任何关系。 'R'Color.Red之间的关系 ,但这只是因为该字符被(隐式)转换为其ASCII表示形式。

Enum.Parse旨在根据声明的枚举成员的名称string转换为枚举,而不是其值。因此,Enum.Parse仅在您要将"Red"转换为Color.Red时才有效。要将字符R(即数字89)转换为Color.Red,只需将其转换为枚举类型:

Color red = (Color)'R';

如果您的目标是将字符串"R"转换为Color.Red,则需要将字符串视为字符数组,将其转换为char

Color red = (Color)"R"[0];

可以预先使用诸如Enum.IsDefined之类的方法来确定输入是否是有效的枚举值。但正如上面的评论中所指出的,这并非如此设计使用枚举。 char - ish enum可能是错误的工具。