0Pricing
C# Academy · Lektion

Was sind Expression Trees

Verstehen Sie Code als dargestellte Datenstruktur.

Was sind Expression Trees ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Code als Daten

Ein Ausdrucksbaum stellt Code als Datenstruktur dar, die Sie zur Laufzeit untersuchen können, statt als kompilierte Anweisungen, die Sie nur ausführen können. C# modelliert dies mit Expression<TDelegate>.

Lambda-Ausdruck als Delegate oder Baum

Weisen Sie einen Lambda-Ausdruck einem Func<...> zu, erhalten Sie ausführbaren Code. Weisen Sie denselben Lambda-Ausdruck einem Expression<Func<...>> zu, erstellt der Compiler einen Baum, der ihn beschreibt.

using System;
using System.Linq.Expressions;

Func<int, int> runnable = x => x + 1;          // compiled delegate
Expression<Func<int, int>> tree = x => x + 1;  // data structure

Console.WriteLine(runnable(5));   // 6
Console.WriteLine(tree);          // x => (x + 1)

Den Baum untersuchen

Da es sich um Daten handelt, können Sie die Bestandteile eines Ausdrucksbaums auslesen: seine Parameter, seinen Rumpf und seinen Knotentyp.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> tree = x => x + 1;
Console.WriteLine(tree.Parameters[0].Name); // x
Console.WriteLine(tree.Body.NodeType);      // Add
Console.WriteLine(tree.ReturnType);         // System.Int32

Die Expression-Hierarchie

Jeder Knoten leitet sich von System.Linq.Expressions.Expression ab. Zu den häufigsten Arten gehören BinaryExpression, ParameterExpression, ConstantExpression und MethodCallExpression.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> tree = x => x + 1;
var body = (BinaryExpression)tree.Body;
Console.WriteLine(body.Left);  // x
Console.WriteLine(body.Right); // 1

Nur Ausdrucks-Lambdas sind zulässig

Sie können nur einen Lambda-Ausdruck mit genau einem Ausdruck in einen Baum umwandeln. Lambda-Ausdrücke mit Anweisungsblock (also mit geschweiften Klammern) können keine Ausdrucksbäume sein.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> ok = x => x * 2;    // fine
// Expression<Func<int,int>> bad = x => { return x*2; }; // compile error
Console.WriteLine(ok); // x => (x * 2)

Warum das wichtig ist

Ausdrucksbäume ermöglichen es Bibliotheken, Ihren Code zu verstehen, statt ihn nur auszuführen. LINQ-Provider übersetzen sie in SQL, dynamische Abfragen oder andere Zielformate.

NodeType gibt die Operation an

Die Eigenschaft NodeType ist ein Enumerationswert von ExpressionType, der die Operation an diesem Knoten angibt.

using System;
using System.Linq.Expressions;

Expression<Func<int, bool>> tree = x => x > 10;
Console.WriteLine(tree.Body.NodeType); // GreaterThan

Konstanten und Parameter

Ein ParameterExpression steht für eine Eingabe; ein ConstantExpression enthält einen im Code eingebetteten Literalwert.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> tree = x => x + 5;
var body = (BinaryExpression)tree.Body;
Console.WriteLine(body.Left.GetType().Name);  // ParameterExpression (or TypedParameterExpression)
Console.WriteLine(((ConstantExpression)body.Right).Value); // 5

Methodenaufrufe in Bäumen

Ein Lambda-Ausdruck, der eine Methode aufruft, wird zu einem MethodCallExpression, der die Methode und ihre Argumente offenlegt.

using System;
using System.Linq.Expressions;

Expression<Func<string, int>> tree = s => s.Length;
// member access here; a call example:
Expression<Func<string, string>> call = s => s.ToUpper();
var mc = (MethodCallExpression)call.Body;
Console.WriteLine(mc.Method.Name); // ToUpper

Bäume sind unveränderlich

Ausdrucksbäume sind unveränderlich. Um einen Baum zu „ändern“, erstellen Sie aus seinen Bestandteilen einen neuen Baum. So funktionieren auch Besucher und Umschreiber.

Alles zusammenführen

Hier untersuchen wir einen kleinen Prädikatsbaum von Anfang bis Ende: Parameter, Operator und Konstante.

using System;
using System.Linq.Expressions;

Expression<Func<int, bool>> isAdult = age => age >= 18;
var body = (BinaryExpression)isAdult.Body;
Console.WriteLine(isAdult.Parameters[0].Name);          // age
Console.WriteLine(body.NodeType);                       // GreaterThanOrEqual
Console.WriteLine(((ConstantExpression)body.Right).Value); // 18

Schnelltest

Überprüfen Sie, was einen Ausdrucksbaum besonders macht.

Zusammenfassung

Sie haben gelernt, was Ausdrucksbäume sind.

  • Expression<TDelegate> stellt Code als untersuchbare Daten dar.
  • Zu den Knoten gehören Parameter, Konstanten, binäre Operationen und Methodenaufrufe.
  • Nur Lambda-Ausdrücke mit genau einem Ausdruck sind zulässig.
  • Bäume sind unveränderlich; beim Umschreiben werden neue Bäume erstellt.

Häufig gestellte Fragen

Ist die Lektion „Was sind Expression Trees“ kostenlos?

Ja — der vollständige Text von „Was sind Expression Trees“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Was sind Expression Trees“?

Verstehen Sie Code als dargestellte Datenstruktur. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Was sind Expression Trees“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Was sind Expression Trees
  2. Expressions manuell erstellen
  3. Expressions kompilieren und ausführen
  4. Expression Trees in LINQ-Providern
← Zurück zu C# Academy