Avatar ·

为什么在C#中使用Expression<Func<T>>而不是Func<T>?通过示例解释

大家好!我开始学习C#,遇到了这样的结构:`Expression>`。我知道`Func`只是一个可以调用的委托。但为什么要把它包装在`Expression<>`中?似乎可以直接将lambda作为`Func`传递,并在需要时调用它。 例如,在Entity Framework中,我看到在像`.Where()`这样的方法中经常使用`Expression>`。但如果我写`.Where(x => x.Age > 18)`,编译器会自动替换为正确的类型。为什么我需要显式指定`Expression<>`? 我有这样的代码: ```csharp Func square = x => x * x; Console.WriteLine(square(5)); // 25 ``` 以及这样的: ```csharp Expression> squareExpr = x => x * x; // 如何使用它?直接调用是不行的。 ``` 我明白`Expression<>`是一种“表达式树”,但我无法理解实际的区别。什么时候需要使用`Expression>`,什么时候`Func`就足够了?为什么在某些库中...