Как я могу получить поля класса с помощью отражения, когда есть резервные поля?

У меня есть простой класс POCO, например

class C {
  [MyAtrib]
  public int i {get; set;}
  [MyAtrib]  
  public int i2;
}

Когда я звоню:

GetType().GetFields(
  BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

в этом классе (экземпляр) я не могу получить FieldInfo для тех членов, которые автоматически создали геттеры / сеттеры (т.е. int i выше).

На самом деле, я пытаюсь прочитать эти пользовательские атрибуты (MyAtrib) и не может сделать это для тех свойств, которые имеют {get; set;},

Это почему? Я ожидаю получить оба i и это (личное) вспомогательное поле, так как i является публичным.

Могу ли я добраться до i"s MyAtrib как-то через отражение?

1 ответ

Решение

Вы получаете поля прямо сейчас, но public int i {get; set;} это собственность. Вам необходимо получить свойства:

// note: properties -> generally public
GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
Другие вопросы по тегам