C # Получение значения парм с использованием отражения

Как я могу получить значения парм (в цикле с использованием отражения). В предыдущем вопросе кто-то показал мне, как петля через пармы, используя reflection.

static void Main(string[] args) { ManyParms("a","b","c",10,20,true,"end"); Console.ReadLine(); } static void ManyParms(string a, string b, string c, int d, short e, bool f, string g) { var parameters = MethodBase.GetCurrentMethod().GetParameters(); foreach (ParameterInfo parameter in parameters) { string parmName = parameter.Name; Console.WriteLine(parmName); //Following idea required an object first //Type t = this.GetType(); //t.GetField(parmName).GetValue(theObject)); } } 

Если вы должны знать, почему я хочу это сделать, см. Здесь: .NET Отражение всех параметров метода


Спасибо всем – похоже, в Python, PERL, PHP это было бы легко.
Хотя это может и не быть reflectionм, если я использую reflection для получения имени поля, кажется, что будет простой динамический способ получить значение на основе имени. Я еще не пробовал AOP (Aspect Oriented Programming) решения. Это одна из тех вещей, которые, если я не смогу сделать это через час или два, я, вероятно, этого не сделаю.

Вы не можете, в принципе – по крайней мере, не зацепившись за API-интерфейс отладчика / профилирования .

Теоретически может быть какой-то способ classа StackFrame значения параметров, но это не так, и я подозреваю, что для этого вам придется удалить несколько оптимизаций.

Вы можете взломать этот путь, создав анонимный тип внутри вашего метода и воспользовавшись проекционными инициализаторами. Затем вы можете опросить свойства анонимного типа с помощью отражения. Например:

 static void ManyParms( string a, string b, string c, int d, short e, bool f, string g) { var hack = new { a, b, c, d, e, f, g }; foreach (PropertyInfo pi in hack.GetType().GetProperties()) { Console.WriteLine("{0}: {1}", pi.Name, pi.GetValue(hack, null)); } } 

Вы не можете через reflection, и вы не должны делать это в любом случае.

Если вам нужна такая функциональность, используйте прокси-сервер, например, через реализацию RealProxy, которая перехватывает вызов для вас. Затем вы можете проверить и изменить любой параметр до фактического вызова (или даже не выполнять оригинальный вызов вообще, это зависит от вас).

Вы не можете сделать это. Отражение работает с метаданными, внедренными во время компиляции, и в то время значения параметров неизвестны.

Рассматривали ли вы использование АОП, например PostSharp ?

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

Вы не можете получить значение параметров метода с помощью отражения. Потому что reflection возвращает информацию метаданных. Если вы хотите получить значение определенного поля или свойства, вам нужно также использовать экземпляр (как вы уже знаете).

Существует несколько способов получить значение параметра, используя внутреннюю сантехнику платформы .NET, а именно API-интерфейс профилировщика и API-интерфейс отладчика.

Вы можете использовать AOP для того, что вы пытаетесь сделать, есть проект Codeplex под названием CThru, который может вам помочь – с помощью CThru вы можете перехватить метод при его вызове и получить параметры, с которыми он был вызван.

Инструментарий диагностики PostSharp поддерживает опцию IncludeParameterValue.

Если вы хотите получить более подробную информацию о создании мини-дампа,

см. Доступ к трассировке стека с помощью MDbgEngine и PADRE и создание настраиваемого аспекта PostSharp (с преобразованием IL)

  • Изменение частного статического конечного поля с использованием отражения Java
  • Можно ли создать экземпляр вложенного classа с помощью Java Reflection?
  • Как я могу получить значения параметров вызывающего метода?
  • Есть что-то вроде instanceOf (class C) в Java?
  • C # Reflection - Получить значения полей из простого classа
  • Вызов статического метода с использованием отражения
  • Gson TypeToken с динамическим типом ArrayList
  • Как вызвать частный статический метод с использованием отражения (Java)?
  • В чем разница между a.getClass () и A.class в Java?
  • Как получить имена параметров метода в Java 8 с использованием отражения?
  • Я хочу получить тип переменной во время выполнения
  • Давайте будем гением компьютера.