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