Свойства фильтра, возвращаемые TypeDescriptor.GetProperties (), в зависимости от класса, в котором они объявлены - PullRequest
1 голос
/ 18 сентября 2009

Привет, ребята. У меня следующая ситуация.

Я хочу использовать TypeDescriptor для получения свойств определенного типа. Глубина типа в иерархии наследования может варьироваться. Я только хочу получить свойства, объявленные в самом типе, а не в его родителях (базе). Проблема в том, что когда я вызываю TypeDescriptor.GetProperties (), он возвращает все объявленное в иерархии наследования вплоть до Object.

Я только видел, что могу фильтровать вывод по атрибутам, но я не хочу добавлять еще один атрибут к свойствам в моих типах только для этого. Получать их через отражение и не использовать TypeDescriptor будет делать то, что я хочу, но это не вариант для меня, потому что некоторые свойства будут добавлены динамически в тип в некоторый момент.

Есть идеи? Если вопрос не ясен, я мог бы привести пример.

Ответы [ 2 ]

7 голосов
/ 18 сентября 2009

Вы можете отфильтровать свойства, используя свойство ComponentType:

var properties = from p in TypeDescriptor.GetProperties(x).Cast<PropertyDescriptor>()
                 where p.ComponentType == x.GetType()
                 select p;
1 голос
/ 18 сентября 2009

Не могли бы вы просто изменить реализацию ICustomTypeDescriptor, чтобы отразить желаемое поведение?

...