Нет доступа к полю внутри поля - PullRequest
0 голосов
/ 27 апреля 2020

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

Использование приведенного ниже кода для получения поля, которое я успешно получил, но когда я ищу m_pm или m_fullDescriptor в pmCS не может их найти.

Как я могу получить к нему доступ?

var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "pmCS");

Затем я пытаюсь получить доступ к 'm_pm', как показано ниже;

var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "pmCS").GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "m_pm");

Выдает ошибку;

System.InvalidOperationException: «В последовательности нет соответствующих элементов»

enter image description here

1 Ответ

0 голосов
/ 27 апреля 2020

GetFields () возвращает FieldInfo []. FiledInfo имеет тип RtFieldInfo. Что вам нужно, так это фактический тип поля, и поэтому вы должны использовать свойство FieldType класса FieldInfo следующим образом:


var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "pmCS").FieldType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "m_pm");

Обратите внимание на использование FieldType свойство .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...