C# .NET Framework支持空操作语法或单例

C# .NET Framework支持空操作语法或单例,c#,.net,lambda,delegates,syntactic-sugar,C#,.net,Lambda,Delegates,Syntactic Sugar,在使用现有框架时,有时需要传入一个不执行任何操作的操作委托(通常是原始开发人员添加的扩展点)。例如: var anObject = new Foo(() => { }); var anObject = new Foo(() => string.Empty); 大概Foo对象会在某个时候调用这个委托。我在这里的目标是消除{}的使用,因为我的风格要求{}必须独立,并且独立,我有点强迫症,如果不需要的话,我讨厌长篇大论 在处理返回值的操作时,这非常简单-您可以提供表达式而不是语句(从而

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

var anObject = new Foo(() => { });
var anObject = new Foo(() => string.Empty);
大概Foo对象会在某个时候调用这个委托。我在这里的目标是消除{}的使用,因为我的风格要求{}必须独立,并且独立,我有点强迫症,如果不需要的话,我讨厌长篇大论

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

所以,我想问题分为两部分

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
时,您都会得到完全相同的委托,因此您还可以节省创建和垃圾收集多个委托的成本(诚然很小)。

这就是我要走的方向!不幸的是,我正在处理的代码使用类型化委托,但您的代码与它的代码非常接近。谢谢(在问了这个问题之后,我才明白键入的委托问题)@Sprague,看起来您需要
公共静态类NoOpAction
,以及
公共静态类NoOpAction
。。。只剩下14个了!