从String解析枚举不起作用

Sat*_*nix 2 c# enums

我有这样的public enum声明:

public enum States
    {
        SomeState,
        SomeOtherState
    }
Run Code Online (Sandbox Code Playgroud)

有一个myString可以代表上面任何"状态" 的任意字符串,我想写一个开关来检查它当前是哪一个.

这是我的尝试.

States state = Enum.Parse(States, myString, true);
            switch (state)
            {
                case States.SomeState:
                case States.SomeOtherState:
                    break;
                default:
                    break;
            }
Run Code Online (Sandbox Code Playgroud)

Enum.Parse()它的内部告诉我,参数State被用作一个类型,而不是作为一个变量.这不是正确的用法吗?应该接收的第一个参数Enum.Parse是Type enumType:为什么然后它告诉我它需要一个变量?


许多回复表明使用typeof.不幸的是,我已经尝试过,但由于我收到以下错误,我猜这是一个错误的想法.

Enum.Parse(typeof(States), myString, true);
Run Code Online (Sandbox Code Playgroud)

收益率:

不能隐式地将类型'对象'转换为'状态'.存在显式转换.

Dav*_*yon 5

是的,您需要发送您正在解析的枚举类型(使用typeof):

States state = (States)Enum.Parse(typeof(States), myString, true);
Run Code Online (Sandbox Code Playgroud)

Parse方法期望一个类型的参数System.Type.没有类型States.

这是文档的签名.

[ComVisibleAttribute(true)]
public static Object Parse(
    Type enumType,
    string value,
    bool ignoreCase
)
Run Code Online (Sandbox Code Playgroud)

Parse返回一个,object所以它要求你在解析后转换为你的类型.