Pregunta

Estoy tratando de entrenar una forma de crear programáticamente una clave para Memcached , basado en El nombre del método y los parámetros. Entonces, si tengo un método,

string GetName(int param1, int param2);

volvería:

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

Sé que puede obtener MethodBase utilizando la reflexión, pero ¿cómo obtengo los valores de los parámetros en la cadena, no los tipos de parámetros?

¿Fue útil?

Solución

Lo que estás buscando es un interceptor. Como su nombre lo indica, un interceptor intercepta una invocación de método y le permite realizar cosas antes y después de que se llame a un método. Esto es bastante popular en muchos marcos de almacenamiento en caché y registro.

Otros consejos

No puede obtener los valores de los parámetros del método a partir de la reflexión. Tendría que usar la API de depuración / creación de perfiles. Puede obtener los nombres y tipos de parámetros, pero no los parámetros en sí. Lo siento ...

Esto es lo que se me ocurrió (sin embargo, puede que no sea 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top