Ja, Func<>
kann anstelle der Stelle eines Ausdrucks verwendet werden. Das Dienstprogramm eines Ausdrucksbaums ermöglicht entfernten LINQ-Anbietern wie LINQ to SQL die Möglichkeit, nach vorne zu schauen und zu sehen, welche Anweisungen erforderlich sind, damit die Abfrage funktionieren kann. Mit anderen Worten, Code als Daten zu behandeln.
//run the debugger and float over multBy2. It will be able to tell you that it is an method, but it can't tell you what the implementation is.
Func<int, int> multBy2 = x => 2 * x;
//float over this and it will tell you what the implmentation is, the parameters, the method body and other data
System.Linq.Expressions.Expression<Func<int, int>> expression = x => 2 * x;
Im obigen Code können Sie vergleichen, welche Daten über den Debugger verfügbar sind. Ich lade Sie ein, dies zu tun. Sie werden sehen, dass Func sehr wenig Informationen zur Verfügung hat. Versuchen Sie es erneut mit Expressions und Sie werden eine Menge Informationen sehen, einschließlich des Methodenhauptteils und der Parameter, die zur Laufzeit sichtbar sind. Das ist die wahre Kraft von Expression Trees.
Suche nach 'Expression Trees' vs' Anonymous Delegates'. – Oded
So wird Ausdruck als Ausdrucksbaum bezeichnet? –
Khan
Es wird verwendet, um Ausdrucksbäume zu erstellen. – Oded