可能重复:
在 .NET 中依赖 && 短路安全吗?
我不知道如何正确地表达问题的标题,但是用一行代码来解释很简单:
if (someObject == null || someObject.someProperty)
...
我可以这样做吗?或者这个:
if (someObject != null && someObject.someProperty)
...
可能重复:
在 .NET 中依赖 && 短路安全吗?
我不知道如何正确地表达问题的标题,但是用一行代码来解释很简单:
if (someObject == null || someObject.someProperty)
...
我可以这样做吗?或者这个:
if (someObject != null && someObject.someProperty)
...
是的。
只有当第一个操作数是 时,才会计算第二个操作数false
。
但显然,第二个操作数也必须是布尔值。
同样,&&
仅当第一个操作数为 时才计算第二个操作数true
。
这称为短路。
是的,通常的做法是在 if 语句中使用空值检查,通常使用 AND。
这是有效的,因为如果第一个为真,该语句将短路并结束。
这两个都是有效的:
if(something != null && something.Bool)
...
if(something != null || something.Bool)
...
是的,||
两者&&
都短路。事实上,你偶尔会看到人们编写这样的代码:
x != null && x.f();
这相当于:
if(x != null) x.f();
(大多数时候可能不是一个好主意 - 这不利于可读性。)
是的,你可以,但你想要哪一个取决于你所追求的语义。
在第一种情况下,如果根本没有对象或属性返回 true,则您的条件将运行。基本上没有实例意味着条件逻辑应该执行。
在第二种情况下,没有实例不会导致您的条件运行;在这种情况下,您必须同时拥有一个实例并且该属性的计算结果必须为真。
我今天在加载用户偏好时处理了同样的事情。我必须决定是否“检查”了首选项,并且由于我们可能会添加新的首选项(无需为每个用户为该首选项添加行到数据库中),因此我选择了符合我的用例的后一种条件。