列挙型の型 (System.Type) と、設定する列挙値を含む文字列があります。
例:
enum MyEnum { A, B, C };
typeof(MyEnum) と "B" があります。
MyEnum.B に設定された MyEnum オブジェクトを作成するにはどうすればよいですか?
MyEnum enumValue = (MyEnum)Enum.Parse(typeof(MyEnum), "B");
大文字と小文字を区別しないオーバーロードもあります。
MyEnum にはアクセスできず、typeof(MyEnum) にしかアクセスできないと思います。
void foo(Type t)
{
Object o = Enum.Parse(t, "B");
}
ジェネリックでこれを行うことができます。これをラップする Utility クラスを作成しました。
public static class Utils {
public static T ParseEnum<T>(string value) {
return (T)Enum.Parse(typeof(T), value, true);
}
次に、次のように呼び出します。
string s = "B";
MyEnum enumValue = Utils.ParseEnum<MyEnum>(s);