Warum sollte man Expression<Func<T>> anstelle von Func<T> in C# verwenden? Erklären Sie anhand von Beispielen
Hallo zusammen! Ich habe angefangen, C# zu lernen, und bin auf diese Konstruktion gestoßen: `Expression>`. Es ist klar, dass `Func` einfach ein Delegate ist, das aufgerufen werden kann. Aber warum sollte man es in `Expression<>` einwickeln? Man könnte doch einfach ein Lambda als `Func` übergeben und es bei Bedarf aufrufen.
Zum Beispiel habe ich in Entity Framework gesehen, dass in Methoden wie `.Where()` oft `Expression>` verwendet wird. Aber wenn ich `.Where(x => x.Age > 18)` schreibe, setzt der Compiler automatisch den richtigen Typ ein. Warum sollte ich explizit `Expression<>` angeben?
Ich habe diesen Code:
```csharp
Func square = x => x * x;
Console.WriteLine(square(5)); // 25
```
Und diesen:
```csharp
Expression> squareExpr = x => x * x;
// Wie verwendet man das? Einfach aufrufen kann man es nicht.
```
Ich verstehe, dass `Expression<>` ein "Ausdrucksbaum" ist, aber ich kann den praktischen Unterschied nicht erfassen. Wann muss ich `Expression>` verwenden, und wann reicht `Func`? Und warum wird in manchen Bibliotheken...