C# 用于根据条件调用函数的更简洁语法

C# 用于根据条件调用函数的更简洁语法,c#,function,syntax,parameters,conditional,C#,Function,Syntax,Parameters,Conditional,我发现自己经常做下面的片段 if(bar != null) foo(bar) // That is, pass in object 'bar' to function 'foo' if bar is not null 编辑:foo函数来自一个API,我无权访问它的代码。本质上,API的函数需要一个非空的输入 有没有更干净的办法?或者,如果我发现自己经常这样做,我是否在做一些架构上不正确的事情 抱歉如果这是重复,我似乎找不到合适的搜索词 我曾尝试使用新的合并操作符来实现这一点,但它

我发现自己经常做下面的片段

if(bar != null)
   foo(bar)     // That is, pass in object 'bar' to function 'foo' if bar is not null
编辑:foo函数来自一个API,我无权访问它的代码。本质上,API的函数需要一个非空的输入

有没有更干净的办法?或者,如果我发现自己经常这样做,我是否在做一些架构上不正确的事情

抱歉如果这是重复,我似乎找不到合适的搜索词

我曾尝试使用新的合并操作符来实现这一点,但它不能用于调用函数。不确定是否可以使用三元运算符来实现这一点

我希望有一个单行的方式来做这件事。有点像

bar ?? foo(bar) // That is run foo with bar when bar is not null.

您可以在foo方法内进行空检查:

void foo(object bar)
{
    if(bar == null) return;
    //your lines of code
}
然后,您可以按以下方式运行:

foo(bar);
您可以使用如下所示的示例:

bar != null ? foo(bar) : * ;
其中,在
*
中,如果
bar==null
,则插入要执行的语句

如果我发现自己经常这样做,我是否在做架构上不正确的事情


也许吧。您通常应该知道您的变量是否可以为null,并省略检查。C#8引入了一项功能,帮助您声明、验证和强制引用不能为空:.

关于“if/else”语句的“不干净”是什么?!?有一种更简洁的方法,可以尝试使用聚合函数,如集合的
TrueForAll(array,predicate)
,或者尝试LINQ。我想我应该说清楚。foo函数来自我无权访问的API。本质上,API的函数需要一个非空的输入。编辑我的帖子。。。谢谢你只需要使用if语句我想如果当bar==null时我没有任何要执行的东西,我可以只执行``bar!=无效的foo(bar):返回;`我想这是一种方法。谢谢@KishoreVenkateshan您可以像下面这样打开它无效的傅(大律师):或者,如果你想立即返回,请使用示例中的return关键字。啊,这实际上更好!谢谢你给我指这个。我将确保进一步了解新的C#8功能。