缩短包含'null'测试

本文关键字:测试 null 包含 | 更新日期: 2023-09-27 18:14:29

我可以在if语句中以某种方式将两个对temp的赋值连接到一个条件(与&)中吗?

node temp = new node();
temp = queue.Find(match => match.Check_node_state(element.state));
if (temp == null)
    temp = explored_nodes.Find(match => match.Check_node_state(element.state));
if (temp == null)

缩短包含'null'测试

可以链接空合并操作符

node temp = queue.Find(match => match.Check_node_state(element.state))
            ?? explored_nodes.Find(match => match.Check_node_state(element.state))
            ?? someOtherFind()
            ?? anotherFind();
if (temp == null)
    throw new Exception("This thing really does not exist!");

在c#中,您想要的操作符是??,它允许您在第一个为空的情况下提供替代值。语句看起来像这样:

node temp = queue.Find(match => match.Check_node_state(element.state))
  ?? explored_nodes.Find(match => match.Check_node_state(element.state));

你当然可以这么做:

if (queue.Find(match => match.Check_node_state(element.state)) == null &&
    explored_nodes.Find(match => match.Check_node_state(element.state)) == null)

但我不认为这是一个巨大的改进…

请注意,您需要使用&&而不是&来使代码等效,因为&&会短路,而&将计算两个条件,即使第一个条件为真。

您可以使用Any使代码更具可读性:

if (!queue.Any(match => match.Check_node_state(element.state)) &&
    !explored_nodes.Any(match => match.Check_node_state(element.state)))