我有一个public enum
声明如下:
public enum States
{
SomeState,
SomeOtherState
}
有一个任意字符串myString
可能代表上面的任何“状态”,我想写一个开关来检查它当前是哪一个。
这是我的尝试。
States state = Enum.Parse(States, myString, true);
switch (state)
{
case States.SomeState:
case States.SomeOtherState:
break;
default:
break;
}
在Enum.Parse()
的内部,它告诉我参数State被用作一个类型,而不是作为一个变量。这不是正确的用法吗?应该接收的第一个参数Enum.Parse是Type enumType
:为什么然后它告诉我它需要一个变量?
许多回复指示使用typeof
。不幸的是,我已经尝试过,但由于我收到以下错误,我猜这是一个错误的想法。
Enum.Parse(typeof(States), myString, true);
的产率:
无法将类型'object'隐式转换为'States'。显式转换 存在。
答案 0 :(得分:5)
是的,你需要发送你正在解析的枚举类型(使用typeof
):
States state = (States)Enum.Parse(typeof(States), myString, true);
Parse
方法期望参数类型为System.Type
。不是 类型States
。
以下是docs的签名。
[ComVisibleAttribute(true)]
public static Object Parse(
Type enumType,
string value,
bool ignoreCase
)
Parse
会返回object
,因此需要您在解析后转换为您的类型。
答案 1 :(得分:0)
由于期待某种类型,请更改Enum.Parse(States, myString, true)
;到Enum.Parse(typeof(States), myString, true);
答案 2 :(得分:0)
这是正确的。
States state = Enum.Parse(typeof(States), myString, true);
switch (state)
{
case States.SomeState:
case States.SomeOtherState:
break;
default:
break;
}
答案 3 :(得分:0)
States tmp;
Enum.TryParse<States>(myString,true ,out tmp);