[英]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.