Domanda

Sto cercando di allenare un modo per creare programmaticamente una chiave per Memcached , basato su il nome del metodo e i parametri. Quindi, se ho un metodo,

string GetName(int param1, int param2);

ritornerebbe:

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

So che puoi ottenere MethodBase usando reflection, ma come posso ottenere i valori dei parametri nella stringa, non i tipi di parametro?

È stato utile?

Soluzione

Quello che stai cercando è un intercettore. Come dice il nome, un intercettore intercetta una chiamata di metodo e consente di eseguire operazioni prima e dopo la chiamata di un metodo. Questo è abbastanza popolare in molti framework di cache e logging.

Altri suggerimenti

Non è possibile ottenere i valori dei parametri del metodo da reflection. Dovresti usare l'API di debug / profiling. È possibile ottenere i nomi e i tipi di parametro, ma non i parametri stessi. Siamo spiacenti ...

Questo è quello che ho escogitato (tuttavia, potrebbe non essere particolarmente efficiente):

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 += ")";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top