试图理解表达式树是什么

cod*_*ing 4 c# lambda delegates expression-trees

下面的两个片段产生相同的输出.我理解Func如何用单个参数封装一个方法,并返回一个bool值.您可以为其分配方法,匿名方法或lambda表达式.

Func<int, bool> deleg = i => i < 5;
Console.WriteLine("deleg(4) = {0}", deleg(4));
Run Code Online (Sandbox Code Playgroud)

下面是使用我还不完全理解的表达式树.我为什么要这样做呢?它更灵活,它给我带来了什么好处?

System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
Func<int, bool> deleg2 = expr.Compile();
Console.WriteLine("deleg2(4) = {0}", deleg2(4));
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 5

基本上,表达式树是lambda表达式的主体,允许您使用

  • 反思表达(看看里面有什么)
  • 操纵表达式(简化,扩展(例如添加新功能或修改以处理不同的项目).

一旦你Compile()的表达,它只是一个代表,你只能打电话,不检查或修改.

无论何时你想

  • 动态创建表达式(我的意思是:构造,而不是分配)
  • 动态地操作表达式

Function<>类型是不够的.