【问题标题】:Casting string to enum [duplicate]将字符串转换为枚举[重复]
【发布时间】:2012-12-07 20:38:39
【问题描述】:

我正在读取文件内容并在这样的确切位置获取字符串

 string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

输出将始终为OkErr

在另一边我有MyObjectContentEnum 像这样

public class MyObject

    {
      public enum ContentEnum { Ok = 1, Err = 2 };        
      public ContentEnum Content { get; set; }
    }

现在,在客户端,我想使用这样的代码(将我的字符串 fileContentMessage 转换为 Content 属性)

string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

    MyObject myObj = new MyObject ()
    {
       Content = /// ///,
    };

【问题讨论】:

标签: c# string casting enums


【解决方案1】:

使用Enum.Parse()

var content = (ContentEnum)Enum.Parse(typeof(ContentEnum), fileContentMessage);

【讨论】:

  • Enum.Parse 返回一个需要转换的object。我可以随意编辑 :)
  • 完美,一站式解决方案。谢谢!这使我不必编写另一种方法来处理它。
  • 我尝试使用 Parity Enum,当我给出 123 的字符串值时,它会毫无问题地返回它,即使 Parity 枚举不包含枚举的 123 值
  • @JohnDemetriou 已记录:“如果 value 是一个整数的字符串表示形式,它不代表 enumType 枚举的基础值,则该方法返回一个枚举成员,其基础值是经过值转换的到整数类型。如果不希望出现这种行为,请调用 IsDefined 方法以确保整数的特定字符串表示实际上是 enumType"的成员".
  • @CodeCaster thx
【解决方案2】:

另外,您可以将已经提供的Enum.Parse 答案放入帮助类中易于使用的静态方法中。

public static T ParseEnum<T>(string value)
{
    return (T)Enum.Parse(typeof(T), value, ignoreCase: true);
}

然后像这样使用它:

{
   Content = ParseEnum<ContentEnum>(fileContentMessage);
};

如果您有很多(不同的)枚举要解析,这将特别有用。

【讨论】:

  • 感谢ignoreCase:真正的花絮!
【解决方案3】:

.NET 4.0+ 有一个通用的Enum.TryParse

ContentEnum content;
Enum.TryParse(fileContentMessage, out content);

【讨论】:

    【解决方案4】:

    看看使用类似的东西

    Enum.TryParse

    转换名称或数值的字符串表示形式一 或更多枚举常量到一个等价的枚举对象。一种 参数指定操作是否区分大小写。这 返回值表示转换是否成功。

    Enum.Parse

    转换名称或数值的字符串表示形式一 或多个枚举常量到一个等效的枚举对象。

    【讨论】:

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