创建一个Func<>动态 - Lambda与表达式树

时间:2012-05-26 15:00:54

标签: c# .net c#-4.0 lambda expression-trees

这是一些返回线性函数的代码(y = ax + b)。

public static Func<double, double> LinearFunc(double slope, double offset)
{
    return d => d * slope + offset;
}

我可以用表达式树做同样的事情,但我不确定这是值得的。

我知道lambda将捕获参数,这是一个缺点。还有其他我不了解的优点/缺点吗?

我的主要问题是,在这种情况下使用表达式树是否值得?为什么或为什么不呢?

1 个答案:

答案 0 :(得分:5)

如果你在编译时知道代码,我几乎肯定会使用lambda表达式。捕获参数(而不是表示为常量)这一事实几乎总是无关紧要 - 为了证明构建表达式树的合理性,您必须证明它是重要的

表达式树在以下情况下更适用:

  • 您想要从表达式
  • 的不同动态构建它们
  • 您希望将表达式树分析为数据,例如作为LINQ提供商

如果不是这种情况,使用lambda表达式的可读性好处是巨大的。