【发布时间】:2016-05-19 07:36:17
【问题描述】:
我遇到了一个场景来检查外部和内部对象的空引用。外部对象有可能为空,内部对象也有可能。
if (outerObject != null && outerObject.innerObject != null)
{
outerObject.innerObject.DoSomething();
}
如果 if 中的第二个表达式求值,则将抛出 NullRefence Exception。
如果喜欢,我可以选择使用嵌套
if(outerObject != null)
{
if(outerObject.innerObject != null)
{
outerObject.innerObject.DoSomething();
}
}
我只是想知道,即使第一个表达式为假,是否会计算第二个表达式?
哪个是最好的?
【问题讨论】:
-
鱼或禽,第一个 sn-p 的代码生成与第二个 sn-p 完全相同。叫short-circuit evaluation。广大程序员偏爱 1st sn-p,由您与团队成员讨论或自行选择。
-
CSharp 使用short circuit evaluation,因此仅在必要时进行第二次比较。
-
它是如此基础,我相信任何一本书都提到过它(你读过一本吗?)。此外,它很容易测试,编写几个返回
bool的方法并使用它们(返回false或true)同时使用像if(Method1() && Method2() && (Method3() || Method4())) ...这样的条件 -
这与 && 运算符无关。这是关于 IF 语句的工作原理。垃圾邮件。
-
@ZverevEugene 我认为这是关于 &&,而不是 IF 的工作原理。如果代码是
var compRes = outerObject != null && outerObject.innerObject != null怎么办?它会抛出异常吗?不,所以这绝对是关于 && 运算符
标签: c# performance logical-operators