Umwandlung von Lambda in Ausdrucksbaum

c# expression-trees lambda

Frage

Ich werde es wirklich einfach halten,

Wie bekomme ich Ausdrucksbaum aus Lambda ??

oder aus Abfrageausdruck?

Akzeptierte Antwort

Sie müssen das Lambda einem anderen Typ zuordnen:

// Gives you a delegate:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => x * 2;

Das gleiche gilt für Methodenargumente. Func<> Sie jedoch einen solchen Lambda-Ausdruck einem Func<> -Typ zugewiesen haben, können Sie den Ausdrucksbaum nicht mehr zurückerhalten.


Beliebte Antwort

Konrads Antwort ist exakt. Sie müssen den Lambda-Ausdruck dem Expression<Func<...>> zuweisen, damit der Compiler den Ausdrucksbaum erzeugt. Wenn Sie ein Lambda als Func<...> , Action<...> oder einen anderen Func<...> , haben Sie nur eine Reihe von IL-Anweisungen.

Wenn Sie wirklich ein IL-kompiliertes Lambda in eine Ausdrucksbaumstruktur konvertieren müssen, müssen Sie es dekompilieren (z. B. tun, was Lutz Roeders Reflector-Tool tut). Ich würde vorschlagen, einen Blick auf die Cecil- Bibliothek zu werfen, die erweiterte Unterstützung für die Manipulation von ILs bietet und Ihnen eine Menge Zeit sparen könnte.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum