Frage

Was genau ist Ausdruck <> verwendet für in C #? Gibt es Situationen, in denen Sie Expression <> 's selbst als Objekt instanziiert würden? Wenn ja, ein Beispiel geben!

Danke!

War es hilfreich?

Lösung

Expression<T> ist fast vollständig für LINQ verwendet, aber es funktioniert nicht wurde sein. Innerhalb von LINQ, ist es in der Regel, „Capture“, der in Code ausgedrückt Logik verwendet, aber halten Sie es in Daten. Diese Daten können dann von dem LINQ-Anbieter und behandelten in geeigneter Weise untersucht werden - z.B. indem sie in SQL umgewandelt wird. Normalerweise ist die Ausdrucksbäume in LINQ werden vom Compiler aus Lambda-Ausdrücke oder Abfrageausdrücke erstellt -. Aber in anderen Fällen kann es sein, praktisch, um die API zu verwenden, um direkt selbst

Einige Beispiele von anderen Orten habe ich es benutzt und gesehen verwendet:

  • In MiscUtil , Marc GRA verwendet es "generic Arithmetik" zu implementieren - wenn ein hat den betreffenden Betreiber, kann es allgemein verwendet werden.
  • In UnconstrainedMelody ich es auf eine ähnliche Art und Weise verwendet, um Operationen auf Fahnen Aufzählungen zu führen, und zwar unabhängig ihrer zugrunde liegenden Typ (was als Sie vielleicht schwieriger ist zu erwarten, aufgrund long und ulong verschiedene Bereiche mit)
  • In Visuelle LINQ ich verwendete Abfrageausdrücke zu LINQ „animieren“, so können Sie sehen, was los ist. Während dies offensichtlich eine LINQ Verwendung ist, ist es nicht die traditionelle Form Logik in einer anderen Form zu übersetzen.

Andere Tipps

Im Hinblick auf der LINQ, gibt es Dinge, die Sie tun können, vielseitige LINQ-Abfragen zur Laufzeit erstellen, als Sie können rein in lambdas.

Ich habe Expression oft als Mikro Compiler, als Alternative zu DynamicMethod und IL verwendet. Dieser Ansatz wird stärker in .NET 4.0 ( wie auf InfoQ diskutiert), aber auch in 3.5 gibt es viel Dinge, die Sie tun können (in der Regel auf Basis von Laufzeitdaten, Konfiguration usw.):

Ich habe es auch als Teil eines mathematischen Motor für einige Arbeit, die ich mit Microsoft tat - also einen mathematischen Ausdruck analysieren ( „(x + 12) * y = z“ usw.) in einen Expression Baum, kompilieren und ausführen .

Eine weitere interessante Anwendung (dargestellt durch Jason Bock, hier ) ist in der genetischen Programmierung; bauen Sie Ihre Kandidaten als Expression Bäume, und Sie haben den notwendigen Code sich schnell auszuführen (nach Compile()), aber wichtiger ist (für die genetische Programmierung), auch um Fragmente zu tauschen.

Werfen Sie einen Blick auf meiner vor und nach dem Code in meine Antwort auf eine andere Frage SO .

Zusammenfassung: Expression<> stark vereinfacht den Code, machte es leichter zu verstehen, und sogar ein Phantom Fehler behoben

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top