将字符串转换为枚举类型

77
我正在读取文件内容,并按照精确位置获取字符串,就像这样。
 string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

输出结果将始终为OkErr

另一方面,我有一个名为MyObject的对象,它具有如下的ContentEnum

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 = /// ///,
    };

1
你的问题具体是什么? - TimVK
Enum.TryParse(string value, out variable);http://msdn.microsoft.com/zh-cn/library/dd783499(v=vs.100).aspx - Ravi Y
4个回答

176

使用Enum.Parse()函数。

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

4
Enum.Parse 返回一个需要进行类型转换的 object 对象。我很自由地进行了编辑 :) - Matthias Meid
完美,一行代码解决。谢谢!这让我免于编写另一个处理方法。 - John Suit
1
我尝试使用 Parity 枚举,当我给出字符串值 123 时,它可以正常返回,即使 Parity 枚举不包括枚举的 123 值。 - John Demetriou
@JohnDemetriou 这是有文档记录的: "如果 value 是枚举类型 enumType 中不存在的整数字符串表示形式,该方法将返回一个其底层值为将 value 转换为整数类型的枚举成员。如果不希望出现这种行为,请调用 IsDefined 方法以确保特定的整数字符串表示形式实际上是 enumType 的成员". - CodeCaster
@CodeCaster 谢谢 - John Demetriou

27

作为额外的内容,你可以将已提供的Enum.Parse答案放入一个易于使用的静态方法中,该方法位于帮助程序类中。

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

然后像这样使用:

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

特别适用于需要解析许多(不同的)枚举类型的情况。

1
感谢 ignoreCase: true 的提示! - Colin

22

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

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

18

可以考虑使用类似

Enum.TryParse

将表示一个或多个枚举常量的名称或数值的字符串转换为等效的枚举对象。一个参数指定此操作是否区分大小写。返回值指示是否成功进行了转换。

或者

Enum.Parse

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


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