使用现有框架时,有时您需要传入一个不执行任何操作的操作委托,通常是原始开发人员添加的扩展点。例子:
var anObject = new Foo(() => { });
大概 Foo 对象会在某个时候调用这个委托。我的目标是消除 { } 的使用,因为我的风格规定 { } 需要独立存在,并且需要单独的行,而且我有点强迫症,如果不需要的话,我讨厌冗长。
当处理返回值的操作时,这很简单 - 您可以提供一个表达式而不是语句(从而消除大括号。)示例:
var anObject = new Foo(() => string.Empty);
所以,我想问题是两个部分......
.NET 有任何类型的默认空操作吗?
除了 { } 之外,是否有语法糖可以向 lambda 提供空表达式?
我目前倾向于的解决方案是在前面的赋值中定义委托,以避免在函数调用内使用 lambda 表达式。
我不知道什么是内置的。
您可以只定义委托once作为辅助单例:
var anObject = new Foo(NoOpAction.Instance);
// ...
var anotherObject = new Bar(NoOpAction.Instance);
// ...
public static class NoOpAction
{
private static readonly Action _instance = () => {};
public static Action Instance
{
get { return _instance; }
}
}
因为每次使用时都会分配到完全相同的委托NoOpAction.Instance
在整个程序中,您还节省了创建和垃圾收集多个执行相同操作的委托的成本(诚然很小)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)