鉴于典型的编码口号是“不要在方法调用中引起副作用”。并且,当你依赖于后续代码中方法调用的副作用时,唯一的原因(我知道 - 如果我错了就请启发我)不使用短路运算符。为什么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
答案 0 :(得分:0)
我认为有两个不同的原因和两个不同的答案。
对于C#(以及大多数相关的旧语言),单个&符号或单个管道实际上对变量进行逐位运算(按位而不是逻辑)。这就是为什么在所有C / C ++代码中,当有人想要逻辑和时,你会在他们的代码中看到双&符号。
对于VB.NET 我相信答案只是历史。 Legacy Basic语言一直使用“和”和“或”来进行非短路操作。这是一个非常糟糕的决定,但它一直被带到VB.NET。
它确实提到所有Basic语言都使用“和/或”关键字来执行按位运算。在较旧的Basics中,并没有使用AndAlso或OrElse关键字来强制短路,因此您必须嵌套If语句以获得短路和逻辑等效。