web-dev-qa-db-ja.com

列挙型へのキャスト文字列

私はファイルの内容を読んでいて、このような正確な場所で文字列を取得します

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

出力は常にOkまたはErrのいずれかになります

反対側には、MyObjectがあり、ContentEnumは次のようになっています。

public class MyObject

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

さて、クライアント側では、このようなコードを使用したい(文字列fileContentMessageContentプロパティにキャストする)

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

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

Enum.Parse() を使用します。

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

さらに、既に提供されているEnum.Parse回答を受け取り、ヘルパークラスの使いやすい静的メソッドに入れることができます。

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

そして次のように使用します:

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

解析する(異なる)列挙がたくさんある場合に特に役立ちます。

26
pleinolijf

.NET 4.0+には汎用 Enum.TryParse があります

ContentEnum content;
Enum.TryParse(fileContentMessage, out content);
21
Chris Fulstow

のようなものを使用して見てください

Enum.TryParse

1つ以上の列挙定数の名前または数値の文字列表現を、同等の列挙オブジェクトに変換します。パラメーターは、操作で大文字と小文字を区別するかどうかを指定します。戻り値は、変換が成功したかどうかを示します。

または

Enum.Parse

1つ以上の列挙定数の名前または数値の文字列表現を、同等の列挙オブジェクトに変換します。

18
Adriaan Stander