关于C#:将字符串强制转换为枚举

Casting string to enum

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

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

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

输出始终为OkErr

另一方面,我有一个MyObject,它的ContentEnum是这样的。

1
2
3
4
5
6
public class MyObject

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

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

1
2
3
4
5
6
string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

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


使用Enum.Parse()

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


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

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

像这样使用它:

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

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


.NET 4.0+具有一般的Enum.Trparse

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

看看用什么

枚举

Converts the string representation of the name or numeric value of one
or more enumerated constants to an equivalent enumerated object. A
parameter specifies whether the operation is case-sensitive. The
return value indicates whether the conversion succeeded.

枚举

Converts the string representation of the name or numeric value of one
or more enumerated constants to an equivalent enumerated object.