È possibile passare il nome fortemente tipizzato di un metodo come espressione lambda senza fornire anche i parametri e/o le parentesi?Utilizzo di un metodo fortemente tipizzato come argomento senza specificare i parametri
Per esempio, se ho il seguente metodo:
public class CalleeClass
{
public void MethodA(obj param1, obj param2)
{
...
}
}
Vorrei chiamare questo metodo altrove tramite:
return new MyClass<CalleeClass>(c => c.MethodA); //Note: no()'s or arguments
Dove MiaClasse sarebbe responsabile per, diciamo, MVC instradamento utilizzando il nome del metodo come destinazione. L'obiettivo qui è che vogliamo essere in grado di utilizzare le viste fortemente tipizzate tramite i metodi del controller e non voglio dover fornire parametri "stupidi" che non vengono utilizzati.
Attualmente, sto usando un codice simile al seguente per usare i nomi dei metodi, ma questo stile richiede ancora il passaggio di argomenti falsi e/o parentesi.
public void MyClass<T>(Expression<Action<T>> action)
{
var methodName = (action.Body as MethodCallExpression).Method.Name;
}
EDIT: Ci scusiamo per la confusione, ma inizialmente ho cercato di semplificare il problema solo tra cui quello che ho pensato che avresti bisogno, ed in tal modo lasciato fuori alcune informazioni chiave. L'obiettivo finale qui è avere MyClass ricevere un tipo generico + espressione lambda, e l'espressione lambda può passare nel nome del metodo fortemente tipizzato senza creare un'istanza di un oggetto. -MB
Non si possono impostare parametri opzionali? Inoltre: MethodCallExpression non funzionerà a meno che non abbia la parentesi, ne sono abbastanza sicuro. – chemicalNova
I parametri non sono stupidi; sono usati dal compilatore ... –
Senza offesa per i parametri, ma abbiamo solo bisogno del nome del metodo per il routing, e sembra strano dare l'impressione che stiamo creando un'istanza di un oggetto.Non sono convinto che questo sia possibile, ed è per questo che sono venuto qui. :) –