2

私は次の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);

収量:

タイプ「オブジェクト」を「状態」に暗黙的に変換することはできません。明示的な変換が存在します。

4

5 に答える 5

1

extension class次のように使用して、よりエレガントにすることができます。

namespace YourClass.Models;

public static E ToEnum<E>(this object value, bool ignoreCase = true) where E : Enum
{
    if(value == null)
    {
        throw new ArgumentNullException("Value cannot be null");
    }
    return (E)Enum.Parse(typeof(E), value.ToString(), ignoreCase);
}
そしてそれを次のように使用します:
States state = myString.ToEnum<States>();
于 2021-12-12T12:16:41.640 に答える
0

型を期待しているので、Enum.Parse(States, myString, true);を変更してください。にEnum.Parse(typeof(States), myString, true);

于 2013-09-27T14:20:42.040 に答える
0

これは正しいものです。

States state = Enum.Parse(typeof(States), myString, true);
switch (state)
{
    case States.SomeState:
    case States.SomeOtherState:
        break;
    default:
        break;
}
于 2013-09-27T14:20:43.930 に答える
0
States tmp;
 Enum.TryParse<States>(myString,true ,out tmp);
于 2013-09-27T14:21:50.780 に答える