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?

Foi útil?

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 += ")";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top