Erhalte Endwerte von Lambda-Expressions-Methodenparametern

7

Grundsätzlich möchte ich die Werte der Parameter einer aufgerufenen Methode wie folgt erhalten:

%Vor%     
Omu 22.09.2010, 06:04
quelle

5 Antworten

17

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).

%Vor%     
Jon Skeet 22.09.2010, 06:07
quelle
4

Wie Jon sagte, können Sie überprüfen, ob der Ausdruck ein MethodCallExpression

ist %Vor%     
Rohan West 22.09.2010 06:14
quelle
2

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:

  • Öffnen Sie das Watch-Fenster im Debugger
  • Sehen Sie sich die Variable expression und ihren Typ an
  • Fügen Sie den erforderlichen Code hinzu, um diesen Ausdruckstyp zu behandeln

Im Laufe der Zeit wird die Methode immer vollständiger.

    
Timwi 22.09.2010 06:34
quelle
2

Meine universelle Antwort ist unten. Ich hoffe, es wird dir und jemand anderem helfen.

%Vor%     
Pavel Nazarov 21.05.2013 14:21
quelle
0
%Vor%

Verwenden Sie das Keyword dynamisch.

    
Walk Walk 04.09.2013 09:29
quelle

Tags und Links