2

鉴于典型的编码口号是“不要在方法调用中引起副作用”。并且不使用短路运算符的唯一原因(我知道-如果我错了请赐教)是当您依赖后续代码中方法调用的副作用时。为什么 C# 和 VB.NET 等语言中的默认运算符不是短路版本?

IE:

 if (Method1() & Method2()) {
 }

 if Method1 And Method2 then
 End if

 if (Method1() | Method2()) {
 }

 if Method1 Or Method2 then
 End if

实际上(默认情况下)意味着

 if (Method1() && Method2()) {
 }

 if Method1 AndAlso Method2 then
 End if

 if (Method1() || Method2()) {
 }

 if Method1 OrElse Method2 then
 End if
4

1 回答 1

0

好吧,我认为有两个不同的原因和两个不同的答案。

对于 C#(和大多数相关的旧语言),单个 & 号或单个管道实际上对变量进行按位操作(按位而不是逻辑)。这就是为什么在所有 C/C++ 代码中,当有人想要一个逻辑时,你会在他们的代码中看到双与号。

对于 VB.NET,我相信答案只是历史。Legacy Basic 语言一直使用“and”和“or”来进行非短路运算。这是一个非常糟糕的决定,但它一直被带到了 VB.NET。

值得一提的是,所有基本语言也都使用“和/或”关键字进行按位运算。在较早的 Basics 中,没有 AndAlso 或 OrElse 关键字的等价物来强制短路,因此您必须嵌套 If 语句以获得短路 and 的逻辑等价物。

于 2012-02-05T06:17:55.293 回答