【问题标题】:Cleaner syntax for calling a function on condition按条件调用函数的更简洁的语法
【发布时间】:2019-03-23 23:03:23
【问题描述】:

我发现自己经常做以下类型的 sn-ps

if(bar != null)
   foo(bar)     // That is, pass in object 'bar' to function 'foo' if bar is not null

编辑: foo 函数来自 API,我无权访问它的代码。本质上,API 的函数需要一个非空输入。

有没有更简洁的 C# 方法来做到这一点?或者如果我发现自己经常这样做,我是否在做一些架构上不正确的事情?

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

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

我希望有一种方法可以做到这一点。有点像

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

【问题讨论】:

  • “if/else”语句有什么“不干净”的地方?!?
  • 有一个更简洁的方法,尝试使用聚合函数,如 TrueForAll(array, predicate) 与集合,或尝试 LINQ。

标签: c# function syntax parameters conditional


【解决方案1】:

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

void foo(object bar)
{
    if(bar == null) return;
    //your lines of code
}

那么你可以运行为:

foo(bar);

【讨论】:

  • 我想我应该说清楚。 foo 函数来自我无权访问的 API。本质上,API 的函数需要一个非空输入。正在编辑我的帖子...谢谢!
  • 你只需要使用你的 if 语句
【解决方案2】:

您可以使用Ternary operator,例如:

bar != null ? foo(bar) : * ;

* 处插入如果bar == null 时要执行的语句。

【讨论】:

  • 我想如果在 bar == null 时我没有任何要执行的东西,我可以只执行 ``` bar != null 吗?富(酒吧):返回; ``` 我猜这是一种方法。谢谢!
  • @KishoreVenkateshan 您可以像 bar != null ? foo(bar) : ; 一样保持打开状态,或者如果您想立即返回,请使用示例中的 return 关键字。
【解决方案3】:

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

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

【讨论】:

  • 啊这其实更好!感谢您向我指出这一点。我一定会进一步了解 C# 8 的新特性。
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
相关资源
最近更新 更多