簡體   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