Czy można przekazać silnie wpisaną nazwę metody jako wyrażenie lambda bez podania parametrów i/lub nawiasów?Używanie mocno wpisanej metody jako argumentu bez określania parametrów
Na przykład, jeśli mam następujące metody:
public class CalleeClass
{
public void MethodA(obj param1, obj param2)
{
...
}
}
chciałbym wywołać tę metodę gdzie indziej poprzez:
return new MyClass<CalleeClass>(c => c.MethodA); //Note: no()'s or arguments
Gdzie MojaKlasa byłby odpowiedzialny za, powiedzmy, MVC routing przy użyciu nazwy metody jako celu. Chodzi o to, że chcemy mieć możliwość używania silnie typowanych widoków za pomocą metod kontrolera, a nie chcę podawać "głupich" parametrów, które nie są używane.
Obecnie używam kodu podobnego do poniższego w celu użycia nazw metod, ale ten styl nadal wymaga podania fałszywych argumentów i/lub nawiasów.
public void MyClass<T>(Expression<Action<T>> action)
{
var methodName = (action.Body as MethodCallExpression).Method.Name;
}
EDIT: Przepraszamy za zamieszanie, ale początkowo starał się uprościć tę kwestię jedynie w tym, co pomyślałem, że trzeba, iw ten sposób pominięte pewne kluczowe informacje. Ostatecznym celem jest to, aby MyClass otrzymywał ogólne wyrażenie typu + lambda, a wyrażenie lambda może przekazywać silnie wpisaną nazwę metody bez tworzenia instancji obiektu. -MB
Nie można ustawić parametrów opcjonalnych? Ponadto: MethodCallExpression nie będzie działać, jeśli nie mam nawiasu, jestem prawie pewien. – chemicalNova
Parametry nie są głupie; są używane przez kompilator ... –
Bez uszczerbku dla parametrów, ale potrzebujemy tylko nazwy metody dla routingu i wydaje się dziwne, aby sprawiać wrażenie, że tworzymy obiekt.Nie jestem przekonany, że jest to możliwe, dlatego przyjechałem tutaj. :) –