2009-03-19 17 views
1

Für pupose des Erklärens sagen wir, dass ich ein Firmenobjekt habe, das eine Address-Eigenschaft vom Typ Address hat. so wäre es so etwas wie:Holen Sie sich den Typ eines Objekts, das eine Eigenschaft eines anderen Objekts ist

 
public class Company 
{ 
    Address CompanyAddress; 
} 

public class Address 
{ 
    int Number; 
    string StreetName; 
} 

Jetzt habe ich eine Methode, die mit jeder Art von Objekttyp arbeitet, und ich möchte eine bestimmte Eigenschaft aus dem empfangenen Objekt erhalten, so versuche ich, die folgende:

Das Problem ist, dass internalType nie Adresse ist, sondern "System.Reflection.RuntimePropertyInfo", so dass singleProperty immer Null ist;

Wie kann ich das erreichen?

Vielen Dank.

Antwort

2

Das Problem mit Ihrem Code ist internalObject wird das PropertyInfo Objekt von GetProperty Methode zurückgegeben werden. Sie müssen den tatsächlichen Wert dieser Eigenschaft abrufen, daher der Aufruf an GetValue Methode.

public string MyMethod(object myObject, string propertyName) { 
    Type objectType = myObject.GetType(); 
    object internalObject = objectType.GetProperty("Address").GetValue(myObject, null); 

    Type internalType = internalObject.GetType(); 
    PropertyInfo singleProperty = internalType.GetProperty("StreetName"); 

    return singleProperty.GetValue(internalObject, null).ToString(); 
} 
+0

Das ist perfekt. Ich danke dir sehr !!!! –

0

Das interneObject ist nur ein PropertyInfo-Objekt, genau wie singleProperty.

sollten Sie die gleiche Technik verwenden, das eigentliche Objekt zu extrahieren:

PropertyInfo addressProperty = objectType.GetProperty("Address"); 

    object interalObject = addressProperty.GetValue(myObject); 

Der Rest ist richtig.

Verwandte Themen