【问题标题】:Cast a String to an Enum Tag in C# [duplicate]在 C# 中将字符串强制转换为枚举标记 [重复]
【发布时间】:2011-06-14 12:11:15
【问题描述】:

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

如何在 C# 中将字符串(文本)转换为 Enum 标记值

【问题讨论】:

标签: c# enums


【解决方案1】:

我通常对这些东西使用通用 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");

【讨论】:

    【解决方案2】:

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

    这极大地改善了事情。

    【讨论】:

      【解决方案3】:

      .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 ,您必须处理它。

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

      我希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        你可以这样做:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            使用Enum.Parse:

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

            【讨论】:

              猜你喜欢
              • 2012-01-03
              • 2012-12-07
              • 1970-01-01
              • 2019-02-21
              • 2010-09-06
              • 2015-06-10
              • 2017-05-01
              相关资源
              最近更新 更多