2016-04-01 7 views
0

Ich verwende Entity Framework und ich versuche, eine Eigenschaft aus einer Instanz einer der Entitätsklassen zurückzugeben, die eine Tabelle in meiner Datenbank darstellt. Ich bekomme immer einen null Wert zurück. Funktioniert es nicht für Entitätsklassen? Ich habe ein paar Posts auf dieser Site gefunden und bin ihnen gefolgt, so gut ich konnte, aber ohne Erfolg.C# Kann Eigenschaft nicht dynamisch aus Entitätsklasse zurückgeben

Ich habe so etwas wie die folgenden:

string propName = "name"; 
var itemID = object.GetType().GetProperty(propName).GetValue(object, null); 

Wenn ich den .GetProperty().GetValue() Teil mit .GetProperties() ersetzen kann ich erfolgreich alle Eigenschaften des Objekts sehen, aber wenn ich es einen Wert von einem einzelnen Objekt zu bekommen versuchen, Zurückgeben null, obwohl ein Wert in diesem Feld ist.

+0

Was ist 'Objekt'? Meinst du "etwasObjekt"? Hat Ihr 'someObject' eine' name' öffentliche Eigenschaft? –

+0

Objekt ist eine Instanz meiner Entitätsklasse und die String-Variable enthält eine Zeichenfolge mit einem Namen, der mit einer Eigenschaft im Objekt übereinstimmt. – jedonavan

+0

Hat Ihre Entität eine öffentliche Eigenschaft namens name? –

Antwort

0

Try this ...

var result = object.GetType().InvokeMember(
    "YourPropertyNameHere", 
    System.Reflection.BindingFlags.GetProperty, 
    null, 
    object, 
    null); 

Info auf InvokeMember ...

https://msdn.microsoft.com/en-us/library/66btctbe%28v=vs.110%29.aspx

Tutorial auf C# Reflection ...

http://www.codeproject.com/Articles/17269/Reflection-in-C-Tutorial

+0

Ok, das hat funktioniert! Ich bin ziemlich neu und verstehe den Unterschied zwischen diesem und meinem Code nicht. Kannst du mir eine kurze Erklärung geben oder mich mit einem Thema, das es erklärt, in die richtige Richtung lenken? Danke – jedonavan

+0

Sie verwenden InvokeMember, um die reflektierten Eigenschaften und Methoden tatsächlich dynamisch aufzurufen. Ich habe GetValue nie benutzt, daher habe ich keine Ahnung, wofür es gedacht ist. Werfen Sie einen Blick auf diese [Tutorial] (http://www.codeproject.com/Articles/17269/Reflection-in-C-Tutorial), sollte es Ihnen helfen. – ManoDestra

0

Sonderbare .. .das hat gut für mich funktioniert. Ich nehme an, an beiden Stellen, wo Sie "Objekt" haben, setzen Sie den Namen Ihrer Objektvariablen?

Eine Sache, die ich bemerkte, war, dass der Name der Eigenschaft Groß-und Kleinschreibung ist, aber wenn ich nicht Groß-und Kleinschreibung in meinem Aufruf von GetProperty(), bekam ich eine NullReferenceException, kein Null-Wert.

+0

Ja, ich habe versucht, den von mir geposteten Code zu vereinfachen. Objekt repräsentiert eine Instanz einer Entitätsklasse. Ich habe bereits sichergestellt, dass der Fall übereinstimmt, also ist das kein Problem für mich. – jedonavan

Verwandte Themen