Использование отражения для получения имени метода и параметров

Я пытаюсь разработать способ программирования для Memcached, основываясь на имени и параметрах метода. Поэтому, если у меня есть метод,

string GetName(int param1, int param2);

он вернется:

string key = "GetName(1,2)";

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

Ответ 1

То, что вы ищете, - это перехватчик. Как и название, перехватчик перехватывает вызов метода и позволяет выполнять действия до и после вызова метода. Это довольно популярно во многих системах кэширования и ведения журналов.

Ответ 2

Вы не можете получить значения параметра метода из отражения. Вам придется использовать API отладки/профилирования. Вы можете получить имена и типы параметров, но не сами параметры. К сожалению...

Ответ 3

Это то, что я придумал (однако это может быть не особенно эффективно):

MethodBase method = MethodBase.GetCurrentMethod();
string key = method.Name + "(";
for (int i = 0; i < method.GetParameters().Length; i++) {
  key += method.GetParameters().GetValue(i);
  if (i < method.GetParameters().Length - 1)
    key += ",";
}
key += ")";