Свойства фильтра, возвращаемые TypeDescriptor.GetProperties (), в зависимости от класса, в котором они объявлены
-
22-07-2019 - |
Вопрос
Привет, ребята. У меня следующая ситуация.
Я хочу использовать TypeDescriptor для получения свойств определенного типа. Глубина типа в иерархии наследования может варьироваться. Я только хочу получить свойства, объявленные в самом типе, а не в его родителях (базе). Проблема в том, что когда я вызываю TypeDescriptor.GetProperties (), он возвращает все объявленное до иерархии наследования вплоть до Object.
Я только видел, что могу фильтровать вывод по атрибутам, но я не хочу добавлять другой атрибут к свойствам в моих типах только для этого. Получать их через отражение и не использовать TypeDescriptor будет делать то, что я хочу, но это не вариант для меня, потому что некоторые свойства будут добавлены в тип динамически в некоторый момент.
Есть идеи? Если вопрос не ясен, я мог бы привести пример.
Решение
Вы можете фильтровать свойства, используя свойство ComponentType
:
var properties = from p in TypeDescriptor.GetProperties(x).Cast<PropertyDescriptor>()
where p.ComponentType == x.GetType()
select p;
Другие советы
Не могли бы вы просто изменить реализацию ICustomTypeDescriptor
, чтобы отразить желаемое поведение?