2012-01-31 11 views
16

Im bir PropertyInfo[] değeri almaya çalışırken alın, ama o iş için olsun olamaz:PropertyInfo değeri

foreach (var propertyInfo in foo.GetType().GetProperties()) 
{ 
     var value = propertyInfo.GetValue(this, null); 
} 

İstisna: Object does not match target type.

Isnt bu onun nasıl yapılması gerekiyordu?

+0

Bu tür ve bu foo nedir? – BNL

+0

Bu özellik 'propertyInfo' tarafından temsil edilen özelliği içeriyor mu? –

cevap

29

PropertyInfo s ürününü foo.GetType() numaralı telefondan ilk defa getirdiğinizde, this numaralı mülkün özelliklerini almaya çalışıyorsunuz. Yani bu daha uygun olur: Teşekkür farz ediyor

var value = propertyInfo.GetValue(foo, null); 

thisfoo aynı türde değil çünkü o istisna alıyoruz vb foo.SomeProperty

+1

@Johan: Hayır, normalde olduğu gibi bağlamda olduğunuz herhangi bir nesneyi ifade eder ... "propertyInfo", döngüdeki her bir "propertyInfo" anlamına gelir. –

7

etkili bir almak istiyorum.

Değer almayı deneyeceğiniz aynı nesnenin özelliklerini aldığınızdan emin olmalısınız. Bunu (hiç böyle değildir) döngünün kapsamı içine foo olmasını bekliyorsanız kodunuzdan tahmin ediyorum, bu yüzden saldırıda bulunan hattını değiştirmek gerekir:

var value = propertyInfo.GetValue(foo, null); 
4

foo 'un türünde bildirilen özellikleri işliyorsunuz, ancak değerlerini aynı türde olmadığından this'dan okumaya çalışın.