.NET Framework supported empty action syntax or singleton

眉间皱痕 提交于 2019-12-02 01:45:36

问题


When working with existing frameworks, sometimes you need to pass in an action delegate which performs no action usually an extension point added by the original developer. Example:

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

And presumably the Foo object will call this delegate at some time. My goal here is to eliminate the use of { }, because my style dictates that { } need to be on their own, and separate lines, and I'm a bit OCD and hate being verbose if I don't have to be.

When dealing with an action which returns a value, this is simple enough- you can provide an expression instead of a statement (thus eliminating the braces.) Example:

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

So, I suppose the question is two parts...

Does .NET have any sort of default empty action? Is there syntactic sugar for providing an empty expression to a lambda, other than { }?

The current solution I'm leaning towards is to define the delegate in a preceding assignment to avoid having to use the lambda expressing inside a function invocation.


回答1:


There's nothing built-in that I'm aware of.

You could just define the delegate once as a helper singleton:

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; }
    }
}

And because you're handed exactly the same delegate every time you use NoOpAction.Instance throughout your program, you're also saving on the (admittedly small) cost of creating and garbage-collecting multiple delegates that all do the same thing.



来源:https://stackoverflow.com/questions/15634886/net-framework-supported-empty-action-syntax-or-singleton

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!