.NET框架支持空操作语法或单(.NET Framework supported empty act

2019-08-18 00:33发布

当与现有框架的工作,有时你需要在通常不执行任何操作由原始开发者添加的扩展点的动作代表通过。 例:

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

想必在Foo对象将调用此委托在一段时间。 我的目标是消除使用{},因为我的风格决定了{}必须对自己的,独立的线,我有点强迫症和讨厌冗长的,如果我没有要。

当与该返回值的动作处理,这是简单enough-你可以提供一个表达,而不是一个声明(从而消除了大括号。)实施例:

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

所以,我认为这个问题是两个部分...

.NET是否有任何排序默认为空行动? 是否有提供一个空的表达式拉姆达语法糖,比另外{}?

当前的解决方案我倾向于是定义在之前的分配委托以避免必须使用一个函数调用内部表达拉姆达。

Answer 1:

没有什么内置的,我所知道的。

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

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整个程序中,你也节省了创建和垃圾收集多个代表所有做同样的事情的(诚然小)成本。



文章来源: .NET Framework supported empty action syntax or singleton