首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否应该用透明实现替换可空的lambda参数?

是否应该用透明实现替换可空的lambda参数?
EN

Stack Overflow用户
提问于 2017-02-16 06:16:47
回答 2查看 90关注 0票数 3

假设一个方法有一个可选的ActionFunc<T, T>参数,通常是null的默认值。这个通常-null lambda表达式将被多次调用。

在这种情况下,是否最好:

  1. 空-在每次使用之前检查lambda表达式,或者. 调用可空的Action正在使用action?.Invoke()。 将可空变换Func<T, T>称为transform == null ? value : transform(value)
  2. .null-在调用方法时检查一次表达式,然后用透明变量替换它? 用null Action代替new Action(() => { })。 把null Func<T, T>s替换为new Func<T, T>((T value) => { return value; })

对于这个问题,请假定:

  • 这是深度嵌套的数学代码,因此它的性能是相关的。
  • 代码的可读性没有受到有意义的影响。

我之所以问这个问题,是因为我经常使用允许可选lambda表达式的方法,这些方法非常有用,但我从来不确定是应该在声明中使用null-check,还是应该在每一种潜在的用法上使用null-check。

我想,如果lambda表达式只执行一次,那么最好在此时只执行null-check。

但是,我很好奇这个方法什么时候会构造一个对象来多次调用lambda表达式。假设这个参数通常是null,那么这个问题似乎简化为一个更简单的问题:null-check是lambda还是执行一个什么都不做的?

EN

回答 2

Stack Overflow用户

发布于 2017-02-16 07:07:31

如果您检查this answer,您将看到一个非常类似的委托问题的一些性能基准测试,尽管在本例中它与引发事件有关:

使用空委托引发事件的成本大约是先使用空检查引发事件的两倍。

我以为你的情况下性能的影响也是一样的。

票数 1
EN

Stack Overflow用户

发布于 2017-02-16 06:59:23

3.使用空方法比每次创建一个新的空lambda要快一些:

代码语言:javascript
复制
static void _() { }

static void b(Action a = null)
{
    if (a == null) a = _;
}

4.以避免空检查

代码语言:javascript
复制
static void _() { }

static void b() { b(_); }

static void b(Action a)
{

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42266334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档