gpt4 book ai didi

c# - 为什么短路运算符不是默认值

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:52 26 4
gpt4 key购买 nike

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

即:

 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

最佳答案

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

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

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

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

关于c# - 为什么短路运算符不是默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com