如何传递'null'动作

时间:2014-05-30 08:22:42

标签: c# .net

我有以下功能定义

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

private void UpdateNonPrintableColumns(ColumnView view, bool visible)  
{  
...  
}   

被召唤的例子:

DoExport(UpdateNonPrintableColumns);

我的问题是。如何通过&#39; null&#39;行动?它甚至可能吗?

e.g。
<删除> DoExport(null); <- Throws exception

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

3 个答案:

答案 0 :(得分:12)

如果你想要传递空行动:

DoExport((x, y) => { })

其次,您必须检查您的代码,因为如果完全正常,则传递null

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

public void A(Action<ColumnView, bool> a)
{
    if (a != null)
    {
        a();
    }
}

或者按照C#6(使用零传播运算符):

public void A(Action<ColumnView, bool> a)
{
    a?.Invoke();
}

答案 1 :(得分:10)

您可以传递无效的操作:

DoExport((_, __) => { });

答案 2 :(得分:2)

或者只是在方法中处理它:

private void DoExport(Action<ColumnView, bool> UpdateColumns)  
{  
  if (UpdateColumns != null)
    UpdateColumns(...);
}