2016-04-04 21 views
0

Ben genel bir sınıfC# genel bir tür alanlarını almak nasıl

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

olduğunu varsayalım ve bir örneklenmiş türünden fooVal için Fieldınfo almak istiyorum:

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

sorundur , fooValField sonra boş. GetFields()'u çağırsam bile boş bir dizi döndürür. Türün doğru olduğunu biliyorum çünkü yansıma bana Foo'1 diyor. Ben sadece fooVal alanını göremediğini anlayamıyorum. Burada özlediğim bir şey mi var? FooVal özelliğini GetProperties olarak adlandırırsam görebilirim, bu yüzden fooVal alanının da görünmesini bekler miydim? alan kamu olmadığından

+4

"BindingFlags.NonPublic | BindingFlags.Instance" ifadesini kullanmalı ve bunları belirtmenize izin veren aşırı yükleme. – PetSerAl

+0

Teşekkürler! Başlangıçta BindingFlag'ları kullandım, o zaman başka bir hata yapmış olmalıyım. GetFields() parametresinin parametrelerin * tüm * alanları döndüreceğini ve hatamı açığa çıkaracağını düşünürdüm ama yapmadı. BindingFlag'larla tekrar denedim ve işe yaradı. Bunu bir cevap olarak koyarsanız, büyük bir yeşil onay işareti verebilirim :) – HypnoToad

+0

@DavidL Katkılarla ilgilenmese de neredeyse bir kopya olduğunu kabul ediyorum. Önce aramayı denedim ve bir sebepten dolayı bu soru hiç gelmedi! – HypnoToad

cevap

1

Sen

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

kullanmak gerekir.

İlgili konular