0

次のようなものを使用したい:

object ob;
            var props = ob.GetType().GetProperties();

            List<Element> list = new List<Element>();
            foreach (var prop in props)
            {
                if (prop.PropertyType == typeof(String))
                    list.Add(makeStringProperty(prop));
                else if (prop.PropertyType == typeof(int))
                    list.Add(makeIntProperty(prop));
                else
                {
                }
            }

特定のオブジェクトのすべてのプロパティの特定のリストに何かを追加します。Enum.GetValues() fe. これは、特定の列挙型に対しては簡単ですが、考えられるすべての列挙型に対してこれをジェネリックにしたいので、たとえば、ob が次のようになるとします。

enum Weather {
sunny,
rainy,
cloudy
}
Weather weather = sunny;

enum Places {
beach,
mall,
home
}
Places place = beach;

両方の変数自体と両方の列挙型のすべての値を取得できます。もちろん、typeof(Enum) などを直接チェックすることはできません。誰かが手がかりを持っていますか?

4

2 に答える 2

1
else if(prop.PropertyType.IsEnum)
{
    var values = Enum.GetValues(prop.PropertyType);
}
于 2013-01-27T15:06:10.390 に答える
0

のようなものです

typeof(Weather).GetFields()

また

ob.GetType().GetFields()

型で直接リフレクションを使用する場合enum。an のメンバーはenum一種のstaticフィールドです。

しかし、あなたも使うことができます

Enum.GetValues(ob.GetType())

いずれにせよ、疑問がある場合は、最初に列挙型かどうかを確認する必要があります。

var typeOfOb = ob.GetType();
if (typeOfOb.IsEnum)
{
  // use Enum.GetValues(typeOfOb) here
}

注:System.Typeは、 のような型決定されたコンパイル時と、 のようなtypeof(Weather)型決定された実行時の両方に使用されるクラスob.GetType()です。GetValues(System.Type)したがって、静的メソッドの引数として両方を使用できます。

于 2013-01-27T15:02:01.427 に答える