-1

文字列を解析して列挙型に変換しようとしています。コードのこの領域では辞書を使用できないため、Enum.Parse() を使用します。ただし、渡される文字列が列挙型と完全に一致する必要がある場合でも、常に失敗します。C# コードは次のとおりです。

hp.ItemSubType.Add((ItemSubtype)Enum.Parse(typeof(ItemSubtype), subTypeString));

そして、これは列挙型の定義です:

public enum ItemSubtype
    {
        ADSComputer,
        // Bunch of values
        CPU
    }

たとえば、の値がsubTypeString「CPU」であっても、 enum のどの値とも一致しません。これには注釈を使用する必要がありますか?

4

3 に答える 3

0

解析ではなく追加の問題 解析をテストしました

var subTypeString = "CPU"; var test = Enum.Parse(typeof(ItemSubtype), subTypeString); 

コレクションのタイプ (hp.ItemSubType) を確認してください。列挙型と同じタイプである必要があります。

于 2013-10-09T09:06:17.663 に答える
0

さて、このコードを書くと

namespace N
{
    using System;

    class Program
    {
        static void Main()
        {
            X value1 = (X)Enum.Parse(typeof(X), "CPU");
            X value2;
            Enum.TryParse("CPU", out value2);
            Console.WriteLine(value1);
            Console.WriteLine(value2);
            Console.ReadKey();
        }
    }

    public enum X
    {
        CPU
    }
}

そしてそれをテストします。何を推測すると、すべてが期待どおりに機能します。いいえ、注釈を使用する必要はありません。

于 2013-10-09T09:06:33.590 に答える
0

推測とヒント: C# では大文字と小文字が区別されるためCpuCPU. また、ジェネリックTryParseを使用してコードを読みやすくし、無効な入力を処理することもできます。

ItemSubtype itemType;
bool canParse = Enum.TryParse<ItemSubtype>("cpu", out itemType);  // false
if(canParse)
{
    hp.ItemSubType.Add(itemType);
}
于 2013-10-09T09:03:56.843 に答える