2016-04-13 6 views
0

Ich aktualisiere einen Code, so dass er in die empfangenen Modelle einfließt und herausfindet, welche Eigenschaften Felder in einer PDF-Datei ausschreiben und nicht manuelle Zuordnung der Felder für jede einzelne PDF-Datei. Das Problem ist, dass ich den Wert der Eigenschaft wegen einer Ausnahme Object does not match target type nicht abrufen kann. Sieht man sich ähnliche Fragen zu SO an, scheint es eine einfache Lösung zu sein, aber es will einfach nicht funktionieren. Hier ist mein Code, den ich über LINQPad testen möchte:Ausnahme "Objekt entspricht nicht dem Zieltyp" beim Reflektieren über Objekteigenschaften

Kann mir jemand zeigen, wo ich hier falsch liege? Liegt es daran, dass die PdfModel2 Klasse, über die ich nachdenke, Eigenschaften hat, die sie von einer Basisklasse erbt?

Antwort

5

Der Grund, warum Sie keinen Wert erhalten, ist, weil Sie den Typ betrachten. Eigenschaften haben nur Werte, wenn eine Instanz an GetValue übergeben wird. Also, was Sie tun müssen, ist:

var pdf = new PdfModel2 { SomeProperty = "SomeValue" }; 
var pdfType = pdf.GetType(); 

pdfType.GetProperties().Where(
    p => 
     p.GetCustomAttribute<PdfTextFieldAttribute>() != null).Select(
    p => 
     p.GetValue(pdf)).Dump(); 
+1

wenn nicht statisch ist –

+1

@DudiKeleti richtig! Aber angesichts der Frage glaube ich nicht, dass seine Eigenschaften statisch sind. –

+0

@ Ric.Net du hast Recht, ich habe vergessen, dass ich überhaupt nicht mit einer Instanz der Klasse gearbeitet habe, so dass es keine Quelle von Werten geben würde. Klassischer Fall der Nachtcodierung, lol. Danke für die Hilfe! – Gup3rSuR4c

Verwandte Themen