C # Атрибут PropertyType Отражение - PullRequest
1 голос
/ 21 августа 2009

Я пытаюсь определить тип свойства, к которому относится атрибут, из конструктора атрибутов. Для большей специфичности я ищу класс, который содержит свойство.

мой текущий конструктор выглядит так:

    public IndexedCategoryAttribute(Type DefiningClass, String HeaderText, int Index)
    {

        this._definingClass = DefiningClass;

однако я хочу, чтобы это выглядело так:

   public IndexedCategoryAttribute(String HeaderText, int Index)
    {

        PropertyInfo Info = ???
        this._definingClass = Info.DeclaringType;

Я полагаю, что это обеспечит более безопасный код для пользователей атрибута, поскольку в настоящее время требуется определение typeof (MyClass) в определении атрибута, что открывает возможность предоставления неверного типа?

Для получения дополнительной информации я использую это с сеткой свойств. Тип используется в static Dictionary<Type, Dictionary<String, int>> для группировки категорий по классу, к которому они относятся.

1 Ответ

3 голосов
/ 21 августа 2009

Я не думаю, что атрибуты, когда создаются, могут знать тип или свойство, с которым они связаны.

Отношения идут другим путем:

  • свойства имеют атрибуты
  • типы имеют атрибуты
  • методы имеют атрибуты

Атрибуты не имеют «типов».

При построении вашей сетки вы должны выполнить сканирование в направлении, противоположном тому, что вы предложили. Для каждого типа в вашем наборе вы можете определить атрибуты, прикрепленные к типу (или погрузиться в атрибуты свойства), и, если эти атрибуты являются атрибутом вашей категории, добавьте их в словарь.

...