Frage

Ich verstehe das Konzept der Ausdrucksbäume vollkommen, aber es fällt mir schwer, Situationen zu finden, in denen sie nützlich sind.Gibt es einen bestimmten Fall, in dem Ausdrucksbäume angewendet werden können?Oder ist es nur als Transportmechanismus für Code nützlich?Ich habe das Gefühl, dass mir hier etwas fehlt.Danke!

War es hilfreich?

Lösung

Oder ist es nur als Transportmechanismus für Code nützlich?

Es ist nützlich als Ausführungsmechanismus für Code.Verwendung der Interpretermuster, Ausdrucksbäume können direkt interpretiert werden.Dies ist nützlich, da es sehr einfach und schnell zu implementieren ist.Solche Dolmetscher sind allgegenwärtig und werden auch in Fällen eingesetzt, in denen scheinbar nichts „interpretiert“ wird, z. B.zum Drucken verschachtelter Strukturen.

Andere Tipps

Einige Unit-Test-Mocking-Frameworks nutzen Ausdrucksbäume, um stark typisierte Erwartungen/Überprüfungen festzulegen.Dh:

myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method
                                              // SomeMethod was called with 
                                              // someObject as the argument

Hier wird der Ausdruck nie tatsächlich ausgeführt, sondern der Ausdruck selbst enthält die interessanten Informationen.Die Alternative ohne Ausdrucksbäume wäre

myMock.Verify("SomeMethod", someObject) // we've lost the strong typing

Ausdrucksbäume sind nützlich, wenn Sie auf die Funktionslogik zugreifen müssen, um sie auf irgendeine Weise zu ändern oder erneut anzuwenden.

Linq to SQL ist ein gutes Beispiel:

//a linq to sql statement
var recs (
    from rec in LinqDataContext.Table
    where rec.IntField > 5
    select rec );

Wenn wir keine Ausdrucksbäume hätten, müsste diese Anweisung alle Datensätze zurückgeben und dann die C#-Where-Logik auf jeden anwenden.

Mit Ausdrucksbäumen das where rec.IntField > 5 kann in SQL analysiert werden:

--SQL statment executed
select *
from [table]
where [table].[IntField] > 5
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top