在C#中将字符串转换为枚举标签

3

6个回答

7
你可以这样做:
MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");

5

虽然所有使用Enum.Parse的人都是正确的,但现在有了Enum.TryParse

这极大地改善了事情。


3

我通常使用通用的枚举类来处理这个问题:

public static class Enum<T>
{
    public static T Parse(string value)
    {
        return (T)Enum.Parse(typeof(T), value);
    }

    public static List<T> GetValues()
    {
        List<T> values = new List<T>();
        foreach (T value in Enum.GetValues(typeof(T)))
            values.Add(value);
        return values;
    }

    public static string GetName(object value)
    {
        return Enum.GetName(typeof(T), value);
    }

    // etc
    // you also can add here TryParse
}

使用更加简单:

Enum<DayOfWeek>.Parse("Friday");

2
使用 Enum.Parse
(EnumType)Enum.Parse(typeof(EnumType), "EnumString");

1

或者像这样将其包装在一个方法中:

T ParseEnum<T>(string stringValue)
{
    return (T) Enum.Parse(typeof(T), stringValue);  
}

1

.net提供了一些在System.Enum类型上的静态方法来实现这个功能,除了实际执行转换的代码之外,还有几件事情需要考虑:

  1. 你必须知道包含你要转换成的值的枚举类型。
  2. 最好考虑到你试图转换的字符串值可能没有在目标枚举类型中定义。

所以如果你有一个枚举:

    public enum TestEnum
    {
        FirstValue,
        SecondValue
    }

然后,System.Enum类提供了以下2个静态方法将字符串值转换为枚举类型:

Enum.IsDefined(.net 1.1 - 4 + silverlight)(用法)

    TestEnum testEnum;
    if( Enum.IsDefined(typeof(TestEnum), "FirstValue") )
    {
        testEnum = (TestEnum)Enum.Parse(typeof(TestEnum), "FirstValue");
    }

Enum.TryParse (.NET 4+ Silverlight)(用法)

    TestEnum testEnum;
    bool success = Enum.TryParse("FirstValue", out testEnum);

另外,如果您不需要执行任何安全检查,则可以使用Enum.Parse方法(如其他人所提到的)。但是,如果您尝试在我们的示例中执行以下操作,则会出现问题:

    Enum.Parse(TestEnum, "ThisValueDoesNotExist")

然后 .net 将抛出一个 System.ArgumentException 异常,您需要处理它。

简而言之,虽然执行您要求的语法很简单,但我建议考虑一些预防措施,以确保无误的代码,特别是如果您正在解析从用户输入获取的字符串。如果该字符串来自设置文件或其他某种值,您可以确定它在枚举类型中定义,则可以跳过我在答案中概述的一些额外步骤。

希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接