¿Es posible pasar el nombre fuertemente tipado de un método como una expresión lambda sin proporcionar también los parámetros y/o paréntesis?Uso de un método fuertemente tipado como argumento sin especificar parámetros
Por ejemplo, si tengo el siguiente método:
public class CalleeClass
{
public void MethodA(obj param1, obj param2)
{
...
}
}
me gustaría llamar a este método en otros lugares a través de:
return new MyClass<CalleeClass>(c => c.MethodA); //Note: no()'s or arguments
Dónde MiClase serían responsables de, digamos, MVC enrutamiento usando el nombre del método como el objetivo. El objetivo aquí es que queremos poder usar vistas fuertemente tipadas a través de métodos de control, y no quiero tener que proporcionar parámetros "tontos" que no se usen.
Actualmente, estoy usando un código similar al siguiente para usar los nombres de los métodos, pero este estilo todavía requiere pasar argumentos falsos y/o paréntesis.
public void MyClass<T>(Expression<Action<T>> action)
{
var methodName = (action.Body as MethodCallExpression).Method.Name;
}
EDIT: Lo siento por la confusión, pero inicialmente trató de simplificar el problema al incluir únicamente lo que pensé que había necesidad, y al hacerlo dejado fuera algo de información clave. El objetivo final aquí es que MyClass reciba un tipo genérico + expresión lambda, y la expresión lambda puede pasar en el nombre del método fuertemente tipado sin instanciar un objeto. -MB
¿No se pueden establecer parámetros opcionales? Además: MethodCallExpression no funcionará a menos que tenga el paréntesis, estoy bastante seguro. – chemicalNova
Los parámetros no son tontos; son utilizados por el compilador ... –
Sin ofender a los parámetros, pero solo necesitamos el nombre del método para el enrutamiento, y parece extraño dar la impresión de que estamos instanciando un objeto.No estoy convencido de que esto sea posible, por eso vine aquí. :) –