C# 我如何通过&x27;空';行动
我有下面的函数定义C# 我如何通过&x27;空';行动,c#,.net,C#,.net,我有下面的函数定义 private void DoExport(Action<ColumnView, bool> UpdateColumns) { ... } private void UpdateNonPrintableColumns(ColumnView view, bool visible) { ... } 我的问题是。如何传递“null”操作?有可能吗 e、 g. DoExport(空) 如果要执行以下操作,请传入空操作: DoExport(
private void DoExport(Action<ColumnView, bool> UpdateColumns)
{
...
}
private void UpdateNonPrintableColumns(ColumnView view, bool visible)
{
...
}
我的问题是。如何传递“null”操作?有可能吗
e、 g.DoExport(空) 如果要执行以下操作,请传入空操作:
DoExport((x, y) => { })
第二,您必须检查您的代码,因为传入null
非常好
public void X()
{
A(null);
}
public void A(Action<ColumnView, bool> a)
{
if (a != null)
{
a();
}
}
public void X()
{
A(空);
}
公开无效A(行动A)
{
如果(a!=null)
{
a();
}
}
或根据C#6(使用空传播运算符):
公共作废A(操作A)
{
a?.Invoke();
}
您可以传递一个不执行任何操作的操作:
DoExport((_, __) => { });
或者只是在方法内部处理它:
private void DoExport(Action<ColumnView, bool> UpdateColumns)
{
if (UpdateColumns != null)
UpdateColumns(...);
}
private void DoExport(操作更新列)
{
if(UpdateColumns!=null)
更新列(…);
}
我收到以下错误:错误19代表“System.Action”未采用0参数。我已更新并测试了我的答案。它确实有效。如果您有其他参数,请将它们添加到lamdba构造函数中。vs2015建议a?.Invoke()代码>双重哇+我只是为了这个很棒的答案。请允许我问一下,在c#规范(或任何地方)中,您在哪里发现可以使用#作为变量?我会投票将其作为我接受的答案,但我只担心维护代码的人不会知道到底是什么about@Eminem规格为-“\”可以用作起始字符,但是没有任何要求要遵循它。我发现在lambdas中显示哪些变量(如果有的话)被有效地忽略是很有用的。同样,这也很公平——Patrick的答案更全面——空检查很重要。下划线来自函数式编程,它们通常的意思是“不在乎这个。”Duh!这一刻就在我身边。应该检查空值+1在相关说明中,您可能需要在某些情况下强制转换null,例如操作a=someCond?MyMethod:(Action)null;
DoExport((_, __) => { });
private void DoExport(Action<ColumnView, bool> UpdateColumns)
{
if (UpdateColumns != null)
UpdateColumns(...);
}