Sé que hay algunas respuestas en el sitio al respecto y me disculpo si esto se duplica de alguna manera, pero todas las que encontré no hacen lo que intento. hacer.Obtener el nombre de un método utilizando una expresión
Estoy tratando de especificar la información del método para que pueda obtener el nombre de una manera segura al no usar cadenas. Así que estoy tratando de extraerlo con una expresión.
decir que quiero obtener el nombre de un método en esta interfaz:
public interface IMyInteface
{
void DoSomething(string param1, string param2);
}
Actualmente puedo obtener el nombre utilizando este método:
MemberInfo GetMethodInfo<T>(Expression<Action<T>> expression)
{
return ((MethodCallExpression)expression.Body).Method;
}
me puede llamar al método de ayuda de la siguiente :
var methodInfo = GetMethodInfo<IMyInteface>(x => x.DoSomething(null, null));
Console.WriteLine(methodInfo.Name);
Pero estoy buscando la versión que me permita obtener el nombre del método sin especificar los parámetros (null, null)
así:
var methodInfo = GetMethodInfo<IMyInteface>(x => x.DoSomething);
Pero todos los intentos fallan para compilar
¿Hay una manera de hacer esto?
No tengo VS en este momento, pero creo que debería intentar aceptar 'Delegate' o' Action 'en una alternativa no genérica. En este caso, debería poder pasar un grupo de métodos –
Snowbear
Si cambio la entrada a Delegar, no se compilará y el error no podrá convertir el grupo de métodos en delegado. Si lo cambio a Action, parece que funciona pero la expresión se convierte en UnaryExpression y el método es nulo y no puedo ver dónde obtener esto desde el UnaryExpression –
Andre
después de convertir ... ¿has probado 'var methodInfo = GetMethodInfo (DoSomething); 'en lugar de' var methodInfo = GetMethodInfo (x => x.DoSomething); '? Además, sigo creyendo que especificar (por defecto (cadena), por defecto (cadena)) es más legible, y puede soportar métodos de sobrecarga en este caso –