将字符串转换为C#中的枚举标记

时间:2011-01-24 12:50:37

标签: c# enums

  

可能重复:
  How do I Convert a string to an enum in C#?

如何将字符串(文本)转换(转换为)为C#

中的枚举标记值

6 个答案:

答案 0 :(得分:7)

你可以这样做:

MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");

答案 1 :(得分:5)

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

这极大地改善了事情。

答案 2 :(得分:3)

我通常使用通用的Enum类:

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");

答案 3 :(得分:2)

使用Enum.Parse

(EnumType)Enum.Parse(typeof(EnumType), "EnumString");

答案 4 :(得分:1)

或者用这样的方法包装它:

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

答案 5 :(得分:1)

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

  1. 您必须知道包含您将要转换为TO的值的枚举类型。
  2. 谨慎考虑以下事实:您尝试投射的字符串值可能未在目标枚举类型上定义。
  3. 所以,如果你有一个枚举:

        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。

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

    我希望这有帮助!