Как получить доступ к свойству элемента массива с помощью Reflection? - PullRequest
1 голос
/ 27 июня 2010

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

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

Но на самом деле, оно возвращает ноль.

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

Флориан Редактировать: Извините за недостаток точности: $ Я получаю доступ к свойству Bands благодаря ответам на мой предпоследний вопрос.Моя настоящая проблема заключается в доступе к свойству 'Columns', которое является свойством типа 'Band'.Я надеюсь, что это более понятно.

EDIT2: вот пример:

PropertyInfo t = control.GetType().GetProperty(entry.Value[i].Nom.Split(new char[] { '.' })[0]);
PropertyInfo property = control.GetType().GetProperty(entry.Value[i].Nom.Split(new char[] { '.' })[0]);
PropertyInfo nestedProperty = property.PropertyType.GetProperty("Bands");

в nestedProperty У меня есть Bands (Infragistics.UltraWinGrid.BandsCollection Bands), но мне не удается получить доступ к Bands [0] и свойство 'Column'

Ответы [ 3 ]

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

Когда вы ссылаетесь на тип некоторого экземпляра, вы получаете только «отражающий» доступ к методам, свойствам и т. Д. Указанного типа.

Следовательно, точечная нотация не поддерживается, так как вы касаетесь в основном 3 типов, некоторого элемента управления, некоторого набора Bands и экземпляра Band.

Другими словами, вы можете запросить у элемента управления свойство «Bands» или тип «Band» для свойства «Columns», но без точечной нотации.

2 голосов
/ 27 июня 2010

Ты едешь слишком быстро. Здесь три типа и три свойства, вам нужно использовать GetType и GetProperty три раза.

1 голос
/ 27 июня 2010

Синтаксис Bands[0] - это индексатор , доступ .Индексаторы - это свойства, которые принимают параметры.C # не разрешает доступ к свойствам с параметрами по имени, но позволяет использовать синтаксис индексатора для свойства, соответствующего имени, указанному в DefaultMemberAttribute для типа типа.Чтобы получить PropertyInfo для индексатора в вашем примере, вы можете написать:

PropertyInfo nestedProperty = property.PropertyType.GetProperty("Bands");
var defaultMember = (DefaultMemberAttribute)Attribute.GetCustomAttribute(nestedProperty.PropertyType, typeof(DefaultMemberAttribute));
var nestedIndexer = nestedProperty.PropertyType.GetProperty(defaultMember.MemberName);

Чтобы получить значение от индексатора, вам нужно будет указать второй параметр для PropertyInfo.GetValue со значениями для передачи:

var value = nestedIndexer.GetValue(bands, new object[] { 0 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...