【问题标题】:Does c# support chaining && in an if statement or do they have to be nested? [duplicate]c# 支持在 if 语句中链接 && 还是必须嵌套? [复制]
【发布时间】:2015-10-01 23:27:15
【问题描述】:

如果我使用下面的代码,

if (obj.ContactDetail != null && obj.ContactDetail.Id != Guid.Empty)

我会在后半部分 (.Id) 得到一个空引用错误,还是它会像 javascript 一样在比较的前半部分退出 If。

我知道这已得到解答,但我不知道用于查找它的术语。对不起。

【问题讨论】:

  • 不仅回复in the documentation,你也可以尝试一下。
  • 为什么当我忘记了一些简单的事情是如何工作时,我会来到这里,得到答案,然后被撞到地上?顺便说一句,我提到我不知道这个词是什么。
  • 这并不是说你被撞到了地上,在一个简单的控制台应用程序中尝试它的代码远远少于在这里写出问题所花费的努力......它实际上是 4测试假设的代码行。
  • 如您所说,这是短路。每个条件都返回一个布尔值。在 && 的情况下,两个条件都必须为真,才能使整个表达式为真。因此,如果第一个为假,则不检查第二个。在 || 的情况下(或),只有一个必须为真,整个表达式为真。如果第一个为真,则无需检查第二个,整个表达式将为真。
  • @CarComp 为什么,因为它非常粗鲁和无礼,并且违反了网站的规则和准则。你甚至连最基本的研究或家庭作业都没有自己尝试解决问题或找到现有的解决方案,反而浪费了大量的时间,不仅是你自己的时间,还有许多其他人的时间.你的评论还表明你知道你做错了,但你还是做了,这使得它更加粗鲁和不恰当。

标签: c# comparison


【解决方案1】:

这称为短路评估,是的,&& 是一个运算符,仅在第一个条件尚未 false 时才评估第二个条件。

MSDN:

条件与运算符 (&&) 对其布尔值执行逻辑与 操作数,但仅在必要时评估其第二个操作数

操作x && y对应于操作x & y,除了如果 x 为假,y 未计算,因为 AND 的结果 不管 y 的值是多少,操作都是假的。 这被称为 “短路”评估。条件与运算符不能 重载,但是常规逻辑运算符的重载和 运算符 true 和 false 也有一定的限制 考虑条件逻辑运算符的重载。

【讨论】:

  • 感谢您为我提供的时间。我很感激。
  • @CarComp:我不知道您是否熟悉 VB.NET,但即使它过于冗长,VB 运算符也更具可读性,因为它是 AndAlso。你可以翻译&&AndAlso 来记住它。如果第一个条件不令人满意,您只需要检查“也”第二个条件。
【解决方案2】:

不,如果第一部分 obj.ContactDetail != null 评估为 false,您将不会得到 NRE 原因,那么它根本不会评估第二部分。只有当第一部分评估为 TRUE 时,才会评估第二部分。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多