c# - 急切操作和短路操作的区别? (| 与 || 和 & 与 &&)

标签 c# .net

我(仍在)学习 C# - 我认为我理解 & 之间的区别& &&以及| & || ...

但是,在阅读了另一篇指南之后,很明显我不明白。

我写了一个小真值表,正如我所想,它们返回相同。从我读到的内容来看,使用双符号听起来像是一个更好的解决方案,但我对它们之间的区别有点困惑,想知道是否有人可以解释/举例说明为什么/何时你会使用一个而不是另一个 - 我试过了阅读 MSDN 示例,但它让我比刚开始时更加困惑!

enter image description here

(而且,如果有人能想出更好的标题,请随意更改它...写一个很尴尬!)

最佳答案

& 有两种不同的用法:按位“与”和逻辑“与”

逻辑 & 和 && 之间的区别仅在于,如果您使用 &,即使第一个表达式已经为假,也会对第二个表达式求值。如果您想在循环中初始化两个变量,这可能(例如)很有趣:

if ((first = (i == 7)) & (second = (j == 10))) { //do something }

如果你使用这种语法,first 和 second 总是有一个值,如果你使用

if ((first = (i == 7)) && (second = (j == 10))) { //do something }

可能只有first在求值后才有值。

对于|也是一样的和||:如果你使用|,两个表达式总是被评估,如果你使用||可能只评估第一个表达式,如果第一个表达式为真,就会出现这种情况。

相比之下,在其他应用程序中 && 可能是更好的选择。如果 myNumber 是 int? 类型,你可以有类似的东西

if (myNumber != null && myNumber.Value == 7)

这只会首先计算 myNumber != null,如果 null 检查没问题,它只会计算第二个表达式。

if (myNumber != null & myNumber.Value == 7)
如果 myNumber 为 null,

将在第二个表达式的计算期间以 NullPointerException 结束。因此,您将在此上下文中使用 &&。

关于c# - 急切操作和短路操作的区别? (| 与 || 和 & 与 &&),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4838171/

相关文章:

.net - 使用azure函数提取文件

c# - WPF UserControl 继承另一个 UserControl

C# ListBox DrawItem 不工作

C# 节点指针问题

c# - SqlDataAdapter 是否在 Fill() 函数后关闭 SqlConnection?

C# 编译器在没有错误消息的情况下崩溃

.net - 在 .NET 4 中结合使用遗留安全策略和动态操作

.net - AssemblyInfo属性如何映射到Win32 VERSIONINFO?

c# - 将 FedEx .net Web 服务从开发人员环境转移到生产环境的最佳方法是什么?

c# - 保存的文件包含(反)斜杠