Nun, Sie müssten in den Ausdruck bohren, das MethodCallExpression
finden und dann die Argumente dafür betrachten. Beachten Sie, dass wir den Wert von o
nicht haben, also müssen wir davon ausgehen, dass die Argumente für die Methode nicht darauf angewiesen sind. Außerdem gehen wir immer noch davon aus, dass der Lambda-Ausdruck nur darauf beruht, dass er ein MethodCallExpression
ist?
EDIT: Okay, hier ist eine bearbeitete Version, die die Argumente bewertet. Es wird jedoch davon ausgegangen, dass Sie nicht wirklich den Lambda-Ausdrucksparameter innerhalb der Argumente verwenden (worum geht es in new object[1]
- es liefert effektiv einen Null-Parameter).
Wie Jon sagte, können Sie überprüfen, ob der Ausdruck ein MethodCallExpression
ist %Vor%Hier ist ein Code, der so entworfen wurde, dass er mit jedem Ausdruck funktioniert - in dem Sinne, dass er nicht grundsätzlich davon ausgeht, dass Sie einen Methodenaufruf-Ausdruck übergeben. Es ist jedoch nicht vollständig. Sie müssen den Rest ausfüllen.
%Vor%Für den von Ihnen erwähnten Fall funktioniert das bereits:
%Vor% Für komplexere Lambda-Ausdrücke, die andere Typen von Ausdrucksknoten verwenden, müssen Sie den obigen Code schrittweise erweitern. Jedes Mal, wenn Sie es verwenden und es ein NotImplementedException
wirft, hier ist, was ich tue:
expression
und ihren Typ an Im Laufe der Zeit wird die Methode immer vollständiger.
Meine universelle Antwort ist unten. Ich hoffe, es wird dir und jemand anderem helfen.
%Vor%