#c# #reflection #methodinfo #fieldinfo
#c# #отражение #methodinfo #fieldinfo
Вопрос:
Как я могу использовать отражение пользователя, чтобы получить поля внутри метода? Я пытался использовать MethodInfo, а затем GetFields, но возвращаемые значения не являются полями, которые я определил в методе.
Например, используя приведенный ниже код, как я могу получить информацию о поле для LineNo?
private void MyMethod()
{
int LineNo = 0;
}
Спасибо
Комментарии:
1. Зачем вам это нужно?
2. Чтение входного файла CSV, его синтаксический анализ и затем создание выходного файла CSV. Заголовки столбцов выходного файла основаны на перечислении. Я хотел использовать коллекцию enum Names, а затем назначить подобные именованные локальные переменные. Я никогда раньше не пытался сделать это на уровне метода. Всегда хорошо быть обученным :-).
3. Если вам нужны данные из метода, верните эти данные.
4. Короткий ответ: вы не можете. внутри метода находится IL-код, его нельзя описать в терминах «полей». Средний ответ: этот код можно декомпилировать с помощью библиотеки, подобной roslyn. Длинный ответ: это, вероятно, было бы огромным излишеством, учитывая задачу, которую вы описали (и которую я до сих пор не понял). Любая приличная библиотека генератора синтаксического анализа CSV позволит вам получать доступ к столбцам по имени. Так что, вероятно, нет необходимости называть локальный var.
Ответ №1:
- Это не поля, а локальные переменные.
- В лучшем случае вы можете получить IL тела метода. Если вы можете каким-то образом проанализировать это, вы сможете получить доступ ко всем локальным файлам, объявленным в методе.
Ответ №2:
С отражением вы не можете получить значения поля в коде функции,
Вы можете получить значения поля класса / Объекта.
Комментарии:
1. Методы не имеют «полей».