如何传递'null'动作

Emi*_*nem 9 .net c#

我有以下功能定义

private void DoExport(Action<ColumnView, bool> UpdateColumns)  
{  
...  
}

private void UpdateNonPrintableColumns(ColumnView view, bool visible)  
{  
...  
}   
Run Code Online (Sandbox Code Playgroud)

被调用的示例:

DoExport(UpdateNonPrintableColumns);
Run Code Online (Sandbox Code Playgroud)

我的问题是.如何传递'null'动作?它甚至可能吗?

例如
DoExport(null); <- Throws exception

在函数体中调用操作时,DoExport(null)会引发异常

Pat*_*man 14

如果您想要传递空行动:

DoExport((x, y) => { })
Run Code Online (Sandbox Code Playgroud)

其次,你必须检查你的代码,因为null如果完全没问题就传入.

public void X()
{
    A(null);
}

public void A(Action<ColumnView, bool> a)
{
    if (a != null)
    {
        a();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者根据C#6(使用空传播运算符):

public void A(Action<ColumnView, bool> a)
{
    a?.Invoke();
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*tle 10

您可以传递无效的操作:

DoExport((_, __) => { });
Run Code Online (Sandbox Code Playgroud)

  • 哇,`_`作为变量名实际上有效! (5认同)
  • 非常*Scala-esque*! (3认同)
  • 我会把这个投票作为我接受的答案,但我只是担心维护代码的人不会知道什么是关于 (2认同)
  • @Eminem规范是[这里](http://msdn.microsoft.com/en-us/library/aa664670.aspx) - '_'可以用作起始字符,但没有要求跟随它的任何东西.我发现它在lambdas中很有用,可以显示哪些变量(如果有的话)被有效地忽略了.而且,这是公平的 - 帕特里克的答案更圆润 - 空检查很重要. (2认同)
  • 下划线来自函数式编程,它们通常意味着"不关心这个". (2认同)