1

列挙型の文字列表現があります。

string val = "namespace_name.enum_name";

これを使用して列挙型を取得できます。

Type myType = Type.GetType(val);

これで、myType.Name = actual_enum_name およびその他の情報が表示されます。この情報を使用して実際の列挙値を取得しようとしましたが、成功しませんでした。

Enum.Getvalues を使用してみましたが、System.Type である myType を Enum.Getvalues が必要とする EnumType に変換するのに行き詰まりました(?)。

得られた情報をもとに実際にEnumオブジェクトを作成しようとしたところ行き詰まりました。

ここからその列挙型の実際のフィールド (メンバーのリスト) を取得するにはどうすればよいですか?

4

2 に答える 2

8

それはそのままで機能するはずで、変換は必要ありません。Enum.GetValues()かかりますType。以下のコードは機能します。

namespace enumtest
{
    public enum Mine
    {
        data1,
        data2
    }

    class Program
    {
        static void Main(string[] args)
        {
            Type myenum = Type.GetType("enumtest.Mine");

            foreach (var curr in Enum.GetValues(myenum))
            {
                Console.WriteLine(curr.ToString());
            }
        }
    }
}

これにより、次のような列挙値のインスタンスを構築できます。

namespace enumtest
{
    public enum Mine
    {
        data1,
        data2
    }

    class Program
    {
        static void Main(string[] args)
        {
            Type myenum = Type.GetType("enumtest.Mine");

            // Let's create an instance now
            var values = Enum.GetValues(myenum);
            var firstValue = values.GetValue(0);
            Mine enumInstance = (Mine)Enum.Parse(myenum, firstValue.ToString());

            Console.WriteLine("I have an instance of the enum! {0}", enumInstance);
        }
    }
}
于 2012-08-15T19:40:27.433 に答える
0

ContactNumberType値を取得するためにEnumがあるとします

string[] names = Enum.GetValues(typeof(ContactNumberType));

GetValues()メソッドが配列を返すため

于 2012-08-15T19:42:19.837 に答える