2

在使用现有框架时,有时您需要传入一个不执行任何操作的操作委托,通常是原始开发人员添加的扩展点。例子:

var anObject = new Foo(() => { });

并且大概 Foo 对象会在某个时候调用这个委托。我的目标是消除 { } 的使用,因为我的风格规定 { } 需要单独使用,并且需要单独的行,而且我有点强迫症并且讨厌在不必要的情况下冗长。

在处理返回值的操作时,这很简单——您可以提供表达式而不是语句(从而消除大括号。)示例:

var anObject = new Foo(() => string.Empty);

所以,我想问题是两个部分......

.NET 是否有任何类型的默认空操作?除了 { } 之外,是否有用于向 lambda 提供空表达式的语法糖?

我目前倾向于的解决方案是在前面的赋值中定义委托,以避免在函数调用中使用 lambda 表达式。

4

1 回答 1

2

我不知道什么是内置的。

您可以将委托定义一次作为助手单例:

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您还可以节省创建和垃圾收集都执行相同操作的多个委托的(诚然很小的)成本。

于 2013-03-26T10:58:08.683 回答