缩短包含'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)
可以链接空合并操作符
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)))