2012-03-18 16 views
9

Yansımayı kullanarak sınıfımın özellik türünü almaya çalışıyorum, ancak bunun yalnızca bir RuntimePropertyInfo döndürdüğünü - bir türün adı olarak.Yansıma kullanılarak yazım alma

Ben nesne MyObject actualData var - bu özelliği içeren - Tipim DatumType olarak dize ve "Öğe" olarak "ad"

ben actualData 2 özelliklere sahip olduğunu görebiliriz ayıklama ediyorum, ilki türüdür dize ikincisi DatumType, ama bu kullandığınızda:

string typeName = actualData.getType().getProperty("Item").getType().Name - bana RuntimePropertyInfo, sen görebiliyor DatumType

ben yanlış yapıyorum değil döndürür? C# - .Net 4.0 kullanıyorum. Çok teşekkürler!

+0

C# kullanarak düşünün

harfe duyarlıdır. Sorunuza dahil ettiğiniz şey aslında denediğiniz şey olamaz. – hvd

+0

benimle dalga mı geçiyorsun? : D hayır sorun değil bu yüzden sorun yok –

+0

. Bunu bir cevap yerine nasıl yorum olarak eklediğime dikkat edin? Ancak, gerçekten denediğiniz kodu eklemezseniz, yaptığınız şeyin yalnızca büyük harf kullanımı sabit olup olmadığını veya başka değişiklikler yaptığını tahmin etmekten vazgeçtik. – hvd

cevap

13

Sen PropertyInfo nesne getProperty() getiri türünü alıyoruz.

string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name; 

Ama bu durumda da basitçe diyebiliriz:

şu anda PropertyInfo nesneye yoluyla nesneye atanan değerin türünü istiyorsanız, diyebiliriz

string typeName = actualData.getType().getProperty("Item").PropertyType.Name; 

deneyin

string typeName = actualData.Item.GetType().Name; 
+0

yalnızca bana - –

+1

türünün adı olarak "Object" i döndürür. Özellik, object olarak tanımlanabilir, ancak buna bir "DatumType" değeri atanmış olabilir. GetProperty, geçerli değerin türünü değil, yalnızca tanımlanan türünü döndürür. Herhangi bir tür, 'object' türünde bir özellik için atanabilir. 'PropertyInfo' kullanmalı ve atanan değerin türünü almak için üzerinde GetValue() 'yi çağırmalısınız. –

+0

Yani bu tür nasıl elde edilir herhangi bir yolu var mı? Çünkü eğer ben gerçekData üzerinde hata ayıklama bakıyorum - Ben bu öğe DatumType olduğunu görebiliyorum, sadece yansıma bana başka bir şey verir –

1

actualData.getType().getProperty("Item") 

, PropertyInfo türünde bir şey alır.

sonra onun türü için sorarsanız

:

actualData.getType().getProperty("Item").getType() 

sen olsun gözlemlemek tam olarak ne olsun.

Bu son getType() sonra gerekli değildir şüpheli.

Düzenleme: birisi bu hatayı reddetti ve bu haksızlık imho. Soru şu: "Neyi yanlış yapıyorum görebiliyor musun?" ve bir getType olmanın cevabı çok doğru. PropertyInfo numaralı telefondan PropertyType'u bulmak, eğer sormak istediği kişi yanlış yaptığını bilirse o kadar kolay olur. en azından bir şey downvote Yorum sefere bırakın lütfen: Bu cevap downvoted kişi için

. Stackoverflow, sadece birbirimizden öğrenirsek, sadece etraftaki herkesi değil, anlamlıdır.

1

GetType() dönüş akımı nesnenin daima tip değil, sivri nesne. Senin durumunda, string typeName = actualData.getType().getProperty("Item").PropertyType.Name

+0

Çalışmıyor. Örneğin, özellik bir Nullable (Of Date) ise, "Nullable'1" değerini döndürür. Sadece dizgi özellikleri için çalışır. – Pachanka