Usando reflexão para obter o nome do método e parâmetros
-
19-08-2019 - |
Pergunta
Eu estou tentando treino uma maneira de programaticamente criar uma chave para Memcached , com base em o nome do método e parâmetros. Então, se eu tenho um método,
string GetName(int param1, int param2);
retornaria:
string key = "GetName(1,2)";
Eu sei que você pode obter o MethodBase usando a reflexão, mas como faço para obter os valores de parâmetros na cadeia, não os tipos de parâmetro?
Solução
O que você está procurando um interceptor. Como o nome diz, um interceptor intercepta uma invocação de método e permite que você execute as coisas antes e depois de um método é chamado. Este é bastante popular em muitos frameworks de cache e registro.
Outras dicas
Você não pode obter valores de parâmetro método de reflexão. Você teria que usar a API de depuração / profiling. Você pode obter os nomes de parâmetros e tipos, mas não os próprios parâmetros. Desculpe ...
Este é o que eu vim acima com (no entanto, não pode ser particularmente eficiente):
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 += ")";