从String解析枚举不起作用

时间:2013-09-27 14:17:52

标签: c# enums

我有一个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'。显式转换   存在。

4 个答案:

答案 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);