public enum Color
{
Red = 'R',
Blue = 'B',
Green = 'G',
Yellow = 'Y',
}
Color color = (Color)Enum.Parse(typeof(Color), "R");
Hello社区!
我尝试使用char枚举解析字符串值,但它会抛出一个System.ArgumentException。
提前致谢:)
答案 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可能是错误的工具。