Enum.Parse总是失败

时间:2013-10-09 08:53:42

标签: c# enums

我正在尝试解析String并将其转换为Enum。我不能在代码的这个区域使用字典,所以我使用Enum.Parse()。但是它总是会失败,即使传递的字符串应该与枚举最终匹配。这是C#代码:

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

这是枚举定义:

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

现在,即使subTypeString的值为“CPU”,它也不会与枚举中的任何内容匹配。我们为此使用注释吗?

3 个答案:

答案 0 :(得分:0)

只是猜测和提示:C#区分大小写,因此CpuCPU不同。此外,您可以使用通用TryParse,它使代码更具可读性,并且还可以处理无效输入:

ItemSubtype itemType;
bool canParse = Enum.TryParse<ItemSubtype>("cpu", out itemType);  // false
if(canParse)
{
    hp.ItemSubType.Add(itemType);
}

答案 1 :(得分:0)

添加而不是解析中的问题我已经测试了解析

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

检查您的集合类型(hp.ItemSubType)它必须具有相同类型的枚举!

答案 2 :(得分: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
    }
}

并测试它。猜猜看,一切都按预期工作。所以不,你不需要使用注释。