我想尝试以下代码:
//all arrays are List<T> type.
if (m.terms[0] != null && m.terms[0].labels != null && m.terms[0].labels[0].title == "Part-of-speech")
{
result = true;
}
Run Code Online (Sandbox Code Playgroud)
但在以下情况下偶尔会发生运行时错误
一世.m.terms == null
II.m.terms!= null,但是m.terms [0]没有初始化.
III.m.terms!= null,并且m.terms [0]已存在,但m.terms [0] .label未初始化.
...
所以我修改它像这样:
if (m.terms[0] != null)
{
if (m.terms[0].labels != null)
{
if (m.terms[0].labels[0].title == "Part-of-speech") { result = true; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方式吗?
&&
是一个短路操作符,所以你编写它的第一种方式和第二种方式在功能上是等价的.
if (a && b && c)
{
// work
}
Run Code Online (Sandbox Code Playgroud)
b
只有在a
返回true 时才会被评估.(同样如此c
).
在您的代码中,检查m.terms[0].labels
不会成为问题,因为如果m.terms[0]
已经为null,您将从表达式中短路.
要完全覆盖你自己,你会想可能增加检查m
和m.terms
,但是.
m != null && m.terms != null && m.terms.Count > 0 && m.terms[0] != null ...
Run Code Online (Sandbox Code Playgroud)
当它从左到右进行评估时,它将在第一个未通过的条件下中断,其余条件将取消选中.