Expression<>, Func<>, Action<>的区别与联系

Fun<>与Action<>

  1. Func<>与Action<>都是匿名委托, 二者的区别在于:
  1. Fun<>带返回值, 且至少有一个参数, Action<>不带返回值,且可以没有任何参数, 简而言之, Action<>比Func<>更加简单.

Fun<>与Expression表达式树

  1. Expression表达式树是一种数据结构, 用于存储粗腰计算, 运算的一种结构, 这种结构只可以存储而不能进行计算.
  2. Fun<>匿名函数一旦定义则不能在运行时进行改变, 改变是动态构造, 而不是重新定义, 表达式则可以.
  3. Fun<>需要将这种表达式换成另一种形式时, 则必须使用Expression辅助.
  4. Expression表达式树可以在运行时, 分析它的数据结构, 而Fun则不可以.
  5. Fun<>可以理解为是编译后的状态, Expression可以理解为编译前的状态.

总结

  • 一般情况下需要将Expression表达式树进行配合使用, 用作在基类中.
    example: Expression<Fun<T,bool>>predicate
原文地址:https://www.cnblogs.com/baron-li/p/14239684.html