繁体   English   中英

从字符串解析枚举不起作用

[英]Parse enum from String not working

我有一个像这样声明的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);

产量:

不能将类型“对象”隐式转换为“状态”。 存在显式转换。

是的,您需要发送要解析的枚举类型(使用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因此它要求您在解析后强制转换为您的类型。

由于需要类型,因此请更改Enum.Parse(States, myString, true) Enum.Parse(typeof(States), myString, true);

这是正确的。

States state = Enum.Parse(typeof(States), myString, true);
switch (state)
{
    case States.SomeState:
    case States.SomeOtherState:
        break;
    default:
        break;
}
States tmp;
 Enum.TryParse<States>(myString,true ,out tmp);

可以通过使用extension class使它更优雅,如下所示:

namespace YourClass.Models;

public static class Converters
{
    public static T ConvertToEnum<T>(this string value) where T : Enum
        => (T)Enum.Parse(typeof(T), value);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM