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