假设一个方法有一个可选的Action或Func<T, T>参数,通常是null的默认值。这个通常-null lambda表达式将被多次调用。
在这种情况下,是否最好:
Action正在使用action?.Invoke()。
将可空变换Func<T, T>称为transform == null ? value : transform(value)。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还是执行一个什么都不做的?
发布于 2017-02-16 07:07:31
如果您检查this answer,您将看到一个非常类似的委托问题的一些性能基准测试,尽管在本例中它与引发事件有关:
使用空委托引发事件的成本大约是先使用空检查引发事件的两倍。
我以为你的情况下性能的影响也是一样的。
发布于 2017-02-16 06:59:23
3.使用空方法比每次创建一个新的空lambda要快一些:
static void _() { }
static void b(Action a = null)
{
if (a == null) a = _;
}4.以避免空检查
static void _() { }
static void b() { b(_); }
static void b(Action a)
{
}https://stackoverflow.com/questions/42266334
复制相似问题