在必要时,我经常这样做以防止空指针异常:
// Example #1
if (cats != null && cats.Count > 0)
{
// Do something
}
在#1中,我一直认为
cats != null
需要放在最前面,因为操作顺序是从左到右进行评估。然而,与示例#1不同,现在如果对象为
null
或者Count
为零,我想要做一些事情,因此我正在使用逻辑OR而不是AND:// Example #2
if (table == null || table.Rows == null || table.Rows.Count <= 0)
{
// Do something
}
逻辑比较的顺序重要吗?或者我可以反转顺序并获得相同的结果,例如在示例#3中?
// Example #3
if (table.Rows.Count <= 0 || table.Rows == null || table == null)
{
// Do something
}
(顺便说一下,我意识到可以像下面这样重新编写#2,但我认为这很混乱,而且我仍然对OR运算符很好奇)
// Example #4
if (!(table != null && table.Rows != null && table.Rows.Count > 0))
{
// Do something
}
&
,它也不会短路(其他C风格的语言也是如此,但在C#中由于其对布尔值的更严格规则,按位与和布尔与的用法更清晰)。 - Jon Hanna