使用现有框架时,有时需要传入一个不执行任何操作的操作委托(通常是原始开发人员添加的扩展点)。例子:
var anObject = new Foo(() => { });
假设Foo对象会在某个时候调用这个委托。我在这里的目标是消除{}的使用,因为我的风格规定{}需要单独存在,并且分开行,而且我有点强迫症,如果没有必要的话,我讨厌冗长。
当处理返回值的操作时,这很简单—您可以提供表达式而不是语句(从而消除了大括号)。例子:
var anObject = new Foo(() => string.Empty);
所以,我想问题是两部分…
.NET是否有任何类型的默认空操作?除了{}之外,是否存在为lambda提供空表达式的语法糖?
我倾向于当前的解决方案是在前面的赋值中定义委托,以避免在函数调用中使用lambda表达式。
我不知道有什么内置的
你可以只定义一次委托作为辅助单例:
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
时都交给您完全相同的委托,因此您还节省了(不可否认的小)创建和垃圾收集多个委托的成本,这些委托都做同样的事情。