In welchen Fällen sind Ausdrucksbäume nützlich?
-
09-06-2019 - |
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!
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