在C中将字符串强制转换为枚举标记#

Cast a String to an Enum Tag in C#

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I Convert a string to an enum in C#?

如何将字符串(文本)转换为C中的枚举标记值#


您可以这样做:

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

虽然所有的enum.parse人员都是正确的,但现在有了enum.triparse!

这大大改善了事情。


我通常使用泛型枚举类来处理这些内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
}

使用更简单:

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

使用Enum.Parse

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

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

  • 必须知道包含要强制转换的值的枚举类型。
  • 考虑到您试图强制转换的字符串值可能没有在目标枚举类型上定义这一事实是明智的。
  • 因此,如果您有一个枚举:

    1
    2
    3
    4
    5
        public enum TestEnum
        {
            FirstValue,
            SecondValue
        }

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

    Enum.IsDefined(.NET 1.1-4+Silverlight)(用法)

    1
    2
    3
    4
    5
        TestEnum testEnum;
        if( Enum.IsDefined(typeof(TestEnum),"FirstValue") )
        {
            testEnum = (TestEnum)Enum.Parse(typeof(TestEnum),"FirstValue");
        }

    enum.typarse(.net 4+silverlight)(用法)

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

    或者,如果不需要执行任何安全检查,则提供enum.parse方法(如其他人所述)。但是,如果您在我们的示例中尝试这样做,

    1
        Enum.Parse(TestEnum,"ThisValueDoesNotExist")

    然后.NET将抛出一个必须处理的System.ArgumentException。

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

    希望这有帮助!


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

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