在OR语句中,我可以将空检查一个对象作为另一个条件吗

本文关键字:一个对象 另一个 条件 检查 语句 OR 我可以 | 更新日期: 2023-09-27 17:52:38

可能重复:
是依靠&.NET中的短路安全?

我不知道如何正确地表达问题的标题,但用一行代码解释起来很简单:

if (someObject == null || someObject.someProperty)
    ...

我能做到吗?或者这个:

if (someObject != null && someObject.someProperty)
    ...

在OR语句中,我可以将空检查一个对象作为另一个条件吗

是。

只有当第一个操作数是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。

我今天在加载用户偏好时处理了同样的事情。我必须决定是否"检查"了首选项,因为我们可以添加新的首选项(而不必为数据库中的每个用户添加该首选项的行(,所以我选择了后一个条件,因为这符合我的用例。