Как получить вложенные свойства - PullRequest
6 голосов
/ 24 июня 2010

Я хочу получить PropertyInfo, здесь код:

string propertyName="Text";
PropertyInfo pi = control.GetType().GetProperty(propertyName);

, он работает нормально, но если я хочу получить вложенные свойства, он возвращает нуль:

string propertyName="DisplayLayout.Override.RowSelectors";
PropertyInfo pi = control.GetType().GetProperty(propertyName);

Есть лиесть ли способ получить вложенные свойства?

С наилучшими пожеланиями,

Флориан

Редактировать: Теперь у меня новая проблема, я хочу получить свойство, которое является массивом:

string propertyName="DisplayLayout.Bands[0].Columns";
PropertyInfo pi = control.GetType().GetProperty(propertyName)

Спасибо

Ответы [ 3 ]

8 голосов
/ 24 июня 2010

Да:

public PropertyInfo GetProp(Type baseType, string propertyName)
{
    string[] parts = propertyName.Split('.');

    return (parts.Length > 1) 
        ? GetProp(baseType.GetProperty(parts[0]).PropertyType, parts.Skip(1).Aggregate((a,i) => a + "." + i)) 
        : baseType.GetProperty(propertyName);
}

Вызывается:

PropertyInfo pi = GetProp(control.GetType(), "DisplayLayout.Override.RowSelectors");

Рекурсия на победу!

3 голосов
/ 24 июня 2010

Просто повторите то же самое с PropertyType, который вы только что получили для свойства (и повторяйте так часто, как вам нужно):

PropertyInfo property = GetType().GetProperty(propertyName);
PropertyInfo nestedProperty = property.PropertyType.GetProperty(nestedPropertyName)
0 голосов
/ 24 июня 2010

Вы можете сделать это, но вы должны сделать «все» для каждого уровня, что означает:

  • Получить свойство от вашего типа объекта
  • Получить типэто свойство
  • Прополоскать и повторить:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...