将字符串转换为枚举

use*_*862 72 c# string enums casting

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

 string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);
Run Code Online (Sandbox Code Playgroud)

输出将始终为OkErr

在另一边我MyObject这有ContentEnum这样的

public class MyObject

    {
      public enum ContentEnum { Ok = 1, Err = 2 };        
      public ContentEnum Content { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

    MyObject myObj = new MyObject ()
    {
       Content = /// ///,
    };
Run Code Online (Sandbox Code Playgroud)

Cod*_*ter 169

使用Enum.Parse().

var content = (ContentEnum)Enum.Parse(typeof(ContentEnum), fileContentMessage);
Run Code Online (Sandbox Code Playgroud)

  • `Enum.Parse`返回一个需要进行转换的`object`.我觉得可以自由编辑:) (4认同)

ple*_*ijf 26

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

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

并像这样使用它:

{
   Content = ParseEnum<ContentEnum>(fileContentMessage);
};
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*tow 21

.NET 4.0+具有通用的Enum.TryParse

ContentEnum content;
Enum.TryParse(fileContentMessage, out content);
Run Code Online (Sandbox Code Playgroud)


Adr*_*der 18

看看使用类似的东西

Enum.TryParse

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

要么

Enum.Parse

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