Используя отражение, чтобы получить имя метода и параметры - PullRequest
9 голосов
/ 23 января 2009

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

string GetName(int param1, int param2);

будет возвращено:

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

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

Ответы [ 3 ]

15 голосов
/ 23 января 2009

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

4 голосов
/ 23 января 2009

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

0 голосов
/ 23 января 2009

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

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 += ")";
...