Как получить экземпляры во всех приватных полях объекта?

2

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

Например, у объекта есть 6 частных полей, я полагаю, что я мог бы получить их FieldInfo с чем-то вроде

myObject.GetType().GetFields(BindingFlags.NonPublic)

но без кубиков - вызов возвращает массив из 0.

Каков правильный синтаксис для доступа к полям?

Теги:
reflection

4 ответа

6
Лучший ответ
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static
  • 1
    Ааа, это тот экземпляр, которого мне не хватало
  • 0
    Просто добавьте статический бит, если вам это тоже нужно :)
4

Вы переопределили флаги по умолчанию, поэтому вам нужно добавить Instance обратно...

myObject.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
  • 0
    +1 за объяснение ..
1

Вы также должны добавить BindingFlags.Instance

myObject.GetType().GetFields(BindingFlags.NonPublic|BindingFlags.Instance)
1

Поскольку вы хотите получить оба поля и значения:

from field in myObject.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
select new
{
    Field = field,
    Value = field.GetValue(myObject)
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню