Was ist der Vorteil von Expression Trees?

.net expression-trees

Frage

Bei der Entwicklung der Anwendungen mit der .Net-Sprache bekomme ich nicht den Nutzen oder Nutzen des Ausdrucksbaums? Ist es wirklich notwendig?

Expertenantwort

Ein Ausdrucksbaum erlaubt Ihnen, Ihren Code in regulärem C # auszudrücken , aber zu dekonstruieren, zu inspizieren und zu interpretieren. Zum Beispiel könnten Sie es interpretieren, indem Sie eine äquivalente TSQL-Zeichenfolge (Beispiel: LINQ-to-SQL oder Entity Framework) oder eine Web-Service-Abfrage (astoria) schreiben. Sie könnten es als RPC-Aufruf interpretieren (ich habe eine ausdrucksbasierte RPC-Schicht geschrieben).

Um meinen Blogeintrag "Explaining Expression" zu wiederholen:

  • Die Delegate-Version ( Func<int,int,bool> ) ist der belgerant-Manager ; "Ich brauche dich, um mir einen Weg zu geben, von zwei ganzen Zahlen zu einem Bool zu kommen; es ist mir egal, wie - wenn ich fertig bin, werde ich dich fragen - und du kannst mir die Antwort sagen".
  • Die Ausdrucksversion ( Expr<Func<int,int,bool>> ) ist der pflichtbewusste Analyst ; "Ich brauche dich, mir zu erklären - wenn ich dir 2 ganze Zahlen geben würde, wie würdest du mir einen Bool geben?"

Wenn Sie den Ausdruck haben, können Sie entweder Compile() aufrufen, um einen Delegaten zu bilden (genau so, wie es erklärt wurde), oder Sie können ihn entpacken und etwas ähnliches tun, je nachdem, welche Schritte er gemacht hat.


Eine andere Ansicht von Expression ist, dass es als eine vereinfachte Version von ILGenerator - aber immer noch ziemlich vielseitig sein kann. Sehr nützlich für Meta-Programmierung. Hier ist ein Artikel, der diesen Ansatz untersucht .


Beliebte Antwort

Ausdrucksbäume verwenden weit in LINQ to SQL, Entity Framework, ASP.NET MVCs HTML-Erweiterungen, wo die Laufzeit den Ausdruck auf eine andere Weise interpretieren muss (LINQ to SQL und EF: um SQL zu erstellen, MVC: um die ausgewählte Eigenschaft zu bestimmen) Feld).

Wenn Sie diese Möglichkeit der Neuinterpretation eines C # / VB-Ausdrucks nicht benötigen, müssen Sie keine Expression-Bäume verwenden.

(Es gibt viele Dinge in .NET, die Sie nicht die meiste Zeit verwenden werden: zB ServiceBase gilt nur, wenn Sie einen Service schreiben, WPF ist für eine Web-App nicht relevant.)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow