2017-10-20 2 views
0

Ich verwende Reflektion, um einige Eigenschaften zu erhalten, und ich habe Probleme, eine zu erhalten, wenn GetValue(item,null) ein Objekt zurückgibt. ich getan habe:Eigenschaften mithilfe der Reflektion abrufen

foreach (var item in items) 
{ 
    item.GetType().GetProperty("Site").GetValue(item,null) 
} 

, das zu tun, habe ich ein Objekt System.Data.Entity.DynamicProxies.Site. Wenn ich es debugge, kann ich alle Eigenschaften dieses Objekts sehen, aber ich kann es nicht bekommen. Zum Beispiel ist eine Eigenschaft: siteName, wie kann ich den Wert davon bekommen?

+0

Warum der 'null' Parameter? Würde [GetValue (Objekt o)] (https://msdn.microsoft.com/en-us/library/hh194385 (v = vs.110) .aspx) Überladung besser sein? – orhtej2

+0

Um den Wert zu erhalten: Sie können einen weiteren Reflektionsaufruf für das zurückgegebene Objekt ausführen oder einfach den [dynamischen Typ] verwenden (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic), um die Arbeit für Sie zu erledigen. – orhtej2

+0

Ich versuche mit einer anderen Reflexion, aber ich kann es nicht bekommen .. –

Antwort

0

DynamicProxies, die von Entity Framework generiert werden, sind Abkömmlinge Ihrer POCO-Klassen. Das heißt, man kann tatsächlich alle Eigenschaften zugreifen, wenn Sie das Ergebnis zu POCO upCast:

foreach (var item in items) 
{ 
    YourNamespace.Site site = (YourNamespace.Site)item.GetType().GetProperty("Site").GetValue(item,null); 
    Console.WriteLine(site.SiteName); 
} 

Wenn Sie Reflexion aus irgendeinem Grund verwenden müssen, dies auch möglich ist:

foreach (var item in items) 
{ 
    PropertyInfo piSite = item.GetType().GetProperty("Site"); 
    object site = piSite.GetValue(item,null); 
    PropertyInfo piSiteName = site.GetType().GetProperty("SiteName"); 
    object siteName = piSiteName.GetValue(site, null); 
    Console.WriteLine(siteName); 
} 

Reflexion ist langsam, Also würde ich TypeDescriptor verwenden, wenn ich den Typ in der Kompilierzeit nicht kenne:

Verwandte Themen