Получить тип объекта, который является свойством другого объекта - PullRequest
1 голос
/ 19 марта 2009

Для объяснения, скажем, у меня есть объект Company, у которого есть свойство Address типа Address. так что это будет что-то вроде:

public class Company  
{  
    Address CompanyAddress;
}  

public class Address  
{
    int Number;
    string StreetName;  
}

Теперь у меня есть метод, который работает с любым типом объекта, и я хочу получить определенное свойство из полученного объекта, поэтому я пытаюсь сделать следующее:

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

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

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

Проблема в том, что internalType никогда не является Address, а "System.Reflection.RuntimePropertyInfo", поэтому singleProperty всегда равен нулю;

Как мне это сделать?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 марта 2009

Проблема с вашим кодом в том, что internalObject будет объектом PropertyInfo, возвращаемым методом GetProperty. Вам необходимо получить фактическое значение этого свойства, отсюда и вызов метода GetValue.

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 голосов
/ 19 марта 2009

internalObject - это просто объект PropertyInfo, как и singleProperty.

Вы должны использовать ту же технику, чтобы извлечь фактический объект:

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

    object interalObject = addressProperty.GetValue(myObject);

Остальное правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...