Wenn ich einen Ausdruck eines Funktionsdelegaten habe, der eine Anzahl von Parametern wie folgt akzeptiert:
%Vor% gibt es einen Weg / wie kann ich einen der Werte (sagen wir 5 für num1
) ersetzen und den entsprechenden Ausdruck erhalten:
BEARBEITEN:
Außerdem müssen komplexe Typen aufgelöst werden, z. B .:
%Vor%Meine Antwort war, einen Expression-Besucher zu verwenden. (Danke @ Alexei-Levenkov für das Aufzeigen).
Die Antwort auf meine besondere Situation war etwas anders als bei dem vereinfachten Beispiel, das ich in der Frage verwendet habe. Aber zur Vollständigkeit, hier war, wie ich es gemacht habe:
%Vor%Beachten Sie, dass IsSimpleType eine Erweiterung ist, die ich von diesem Kern von jonothanconway ausgeliehen habe.
In meiner Situation wollte ich die Verwendung eines komplexen Typs ersetzen. z.B.:
%Vor%Also habe ich die VisitMember-Methode überschrieben. Dies ist noch eine Arbeit in Arbeit, sieht aber so aus:
%Vor%Dies wird nur ein Feld oder eine Eigenschaft auflösen. Der nächste Schritt könnte sein, die Unterstützung für eine Methode hinzuzufügen (aber da sie selbst Parameter haben, wird das mehr Arbeit erfordern ...)
EDIT: Die obige Member-Besucher-Lösung würde auch nicht unterstützen, ein Objekt selbst in einen Methodenaufruf zu übergeben. z.B. (x, thing) => x.DoSomething(thing)
, so dass eine Änderung erforderlich wäre, um dies auch zu tun.