C# 多条件语句的和/或(&;/| |)逻辑

C# 多条件语句的和/或(&;/| |)逻辑,c#,logic,conditional,statements,C#,Logic,Conditional,Statements,如果在C#中有一个If语句,它检查多个条件: if (a == 5 && b == 9) { ... } 如果a==5条件为false,b==9是否仍会被检查,或者它是否会自动退出,因为这已经不可能通过了 类似地,对于OR if语句: if (a == 5 || b == 9) { ... } if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)

如果在C#中有一个If语句,它检查多个条件:

if (a == 5 && b == 9) { ... }
如果a==5条件为false,b==9是否仍会被检查,或者它是否会自动退出,因为这已经不可能通过了

类似地,对于OR if语句:

if (a == 5 || b == 9) { ... }
if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
    ... use a.SomeProperty.Inner

如果a==5为真,b==9还会被检查吗?

对于:
如果(a==5&&b==9){…}

如果a==5条件为false,是否仍会检查b==9,还是会检查 自动退出,因为这不可能再通过了

如果
a==5
false
则不会在该行上执行任何其他控件

For:
如果(a==5 | | b==9){…}

如果a==5为真,b==9还会被检查吗


立即进入,因为第一个条件已经满足要求

&&
|
都是“短路”运算符,这意味着如果从左操作数知道答案,则不会计算右操作数

这意味着:

a && b
如果
a
为假,则不会对
b
进行评估,因为最终答案已为人所知

同样地:

a || b
如果
a
为真,则不会对
b
进行评估,因为最终答案是已知的

如果要计算两个操作数,请改用
&
|
运算符

这样做的好处是,您可以编写在计算所有操作数时会失败的表达式。下面是一个典型的if语句:

if (a == 5 || b == 9) { ... }
if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
    ... use a.SomeProperty.Inner
如果a为null,表达式将继续计算
a.SomeProperty
,它将抛出
NullReferenceException
,但由于
&
短路,如果
a
null
,表达式将不计算其余部分,因此不会抛出异常


显然,如果将
&
替换为
&
,则如果
a
a.SomeProperty
在概念上为
null

&
|
短路,则会引发该异常

但是由于没有任何副作用,JIT编译器可以自由地消除短路。我不知道它是否真的这样做。

进来检查一下
a==5
如果是真的话 将转到
b==9
else 不会进入
b==9
。 在或:
它将使用and运算符检查
a==5
b==9

,根据布尔逻辑,所有条件都必须计算为TRUE。如果其中只有一个条件不满足,则条件的结果将为假

如果a==5条件为false,是否仍会检查b==9,还是会检查 自动退出,因为这不可能再通过了

它会自动退出,因为第一个条件为false,并且结果已知

对于OR运算符,您需要至少有一个条件为TRUE,并且您的逻辑将被执行。如果第一个条件不满足,应用程序将检查其他条件

如果a==5为真,b==9还会被检查吗


不,它不会被检查,因为第一个条件为真,然后就不需要检查另一个条件。

短循环由标准定义。否则,无法说出表达的结果,例如:

if (a != null && a.IsValid) { ... }
在一些C#编译器中,它可以正常工作,在另一些编译器中,它会导致异常。这就是为什么有标准来定义普通行为


编辑:澄清了最后一句话。

对不起,请阅读。这是一个可以通过文档和自己尝试来回答的问题。@TimSchmelter,这很公平。我想我只是不知道如何用词来表达我对搜索引擎的问题你问的是操作员的功能。所以下次你可以在搜索中加入这个词,f.e.“C#operator”。我想了解这次否决投票的原因。嗨,用户3119036,欢迎来到SA。你的答案是可以的,但需要一些分析检查我做了什么。