gpt4 book ai didi

c# - 可空的 lambda 参数是否应该替换为透明的实现?

转载 作者:行者123 更新时间:2023-11-30 17:34:35 25 4
gpt4 key购买 nike

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

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

  1. 在每次使用之前对 lambda 表达式进行空检查,或者...

    一个。调用可为空 Action正在使用 action?.Invoke() .

    调用可空转换 Func<T, T>作为 transform == null ? value : transform(value) .

  2. ...在调用方法时空检查一次表达式,然后用透明变体替换它?

    一个。替换 null Actionnew Action(() => { }) .

    替换 null Func<T, T>new Func<T, T>((T value) => { return value; }) .

对于这个问题,请假设:

  • 这是深度嵌套的数学代码,因此它的性能是相关的。

  • 代码的可读性没有受到有意义的影响。

我问这个问题是因为我经常有允许可选 lambda 表达式的方法,这些方法非常有用,但我不确定我是否应该 null -在声明中检查它们,或者我是否应该 null - 检查它们的每个潜在用途。

我想,如果 lambda 表达式只执行一次,那么最好只执行 null -在那一点上检查。

但是,我很好奇该方法何时构造一个将多次调用 lambda 表达式的对象。假设参数通常null ,那么这个问题似乎简化为一个更简单的问题:它比 null 更快吗? -检查 lambda 或执行什么都不做的 lambda?

最佳答案

如果你勾选this answer你会看到一些非常相似的委托(delegate)问题的性能基准,尽管在这种情况下它与引发事件有关:

The cost for raising an event with an empty delegate is roughly twice that for raising it with a null check first.

我想您的情况对性能的影响是相似的。

关于c# - 可空的 lambda 参数是否应该替换为透明的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42266334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com