. net框架支持空操作语法或单例

本文关键字:语法 单例 操作 框架 支持 net | 更新日期: 2023-09-27 18:06:06

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

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

假设Foo对象会在某个时候调用这个委托。我在这里的目标是消除{}的使用,因为我的风格规定{}需要单独存在,并且分开行,而且我有点强迫症,如果没有必要的话,我讨厌冗长。

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

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

所以,我想问题是两部分…

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

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

. net框架支持空操作语法或单例

我不知道有什么内置的

你可以只定义一次委托作为辅助单例:

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时都交给您完全相同的委托,因此您还节省了(不可否认的小)创建和垃圾收集多个委托的成本,这些委托都做同样的事情。