2016-04-04 15 views
0

私はジェネリッククラスは、C#でジェネリック型のフィールドを取得する方法

class Foo<T> 
{ 
    T fooVal; 
    public T FooVal { get { return fooVal; } } 
} 

を持って言うと、私はインスタンス化されたタイプからfooValためのFieldInfoを取得したい:

Foo<int> fooInt = new foo<int>(); 
FieldInfo fooValField = fooInt.GetType().GetField("fooVal"); 

問題がありますfooValFieldはnullです。私がGetFields()と呼んでも空の配列を返します。私はタイプが正しいことを知っています。リフレクションはFoo'1です。なぜfooValフィールドが表示されないのか分かりません。私がここで紛失しているものはありますか? GetPropertiesを呼び出すとFooValプロパティが表示されるので、fooValフィールドも表示されると思いますか?

+4

あなたはそれらを指定できる 'BindingFlags.NonPublic | BindingFlags.Instance'とoverloadを使うべきです。 – PetSerAl

+0

ありがとう!私は当初BindingFlagsを使用していましたが、私はその時に別の間違いがあったに違いありません。パラメータなしでGetFields()を呼び出すと*すべてのフィールドが返され、私の間違いが明らかになると思ったが、そうではなかった。私はそれらのBindingFlagsでもう一度試してみました。これを答えとして入れれば、大きな緑色のチェックマークを付けることができます:) – HypnoToad

+0

@DavidL属性には関係しませんが、ほぼ重複していると私は同意します。私は最初に検索しようとしましたが、何らかの理由で質問が出ることはありませんでした! – HypnoToad

答えて

1

あなたはフィールドがパブリックではありませんので、

 Foo<int> fooInt = new Foo<int>(); 
     FieldInfo fooValField = fooInt.GetType().GetField("fooVal", BindingFlags.NonPublic | BindingFlags.Instance); 

を使用する必要があります。

関連する問題