【问题标题】:How to prove the order of execution of a nested else statement?如何证明嵌套 else 语句的执行顺序?
【发布时间】:2015-10-05 10:08:26
【问题描述】:

请注意,这不是关于else如何绑定以及范围如何延伸的问题。另外,请注意,这不是我们是否应该使用花括号的问题。

请注意以下嵌套条件语句。

if(alpha)
  if(beta)
    AlphaAndBeta();
  else
    AlphaNotBeta();

就个人而言,即使我非常相信删除任何多余的括号,我还是建议在这种情况下使用花括号,以清楚地表明 else 语句是内部条件,这可能很难看出来,尤其是当一些聪明的驴子开始像这样在压痕周围玩耍时。

if(alpha)
  if(beta)
    AlphaAndBeta();
else
  AlphaNotBeta();

但是,我想方便地参考描述行为的位置。我查看了 MSDN 上的语言定义,但没有找到确切的位置。它需要超级清楚地说明 else 如何绑定到它的 if (并且不一定必须是 MS 的官方站点)。

请问在哪里可以找到该页面?

【问题讨论】:

  • 为了帮助您可视化正在发生的事情,您可以使用“CodeMaid”和“Indent Guides”
  • @WiiMaxx 嗯...我可能会。但是看不到这与我的问题有什么关系。特别是考虑到第一段中的免责声明。也许我错过了你的意思?
  • 我知道,因为它只是一个评论。 :)

标签: c# if-statement


【解决方案1】:

这记录在C# specification, section 8.7.1 - The if statement:

else 部分与语法允许的在词法上最近的 if 之前的部分相关联。因此,if 形式的声明

if (x) if (y) F(); else G();

等价于

if (x) {
   if (y) {
      F();
   }
   else {
      G();
   }
}

【讨论】:

  • 更明确的例子 +1。然而,蒂姆的回答更让人回味无穷,所以他会得到绿色检查。 :)
  • @KonradViltersten,我认为这对您来说是一个糟糕的决定。这是比较清楚的答案,应该被选为最佳答案。
  • 我明白你的意思,不表态,我并不反对。我完全理解接受 最佳回复的重要性,所以我想知道他是否更强大,因为即使非开发人员也可以阅读。在您的回复中,需要几秒钟来计算括号并弄清楚第一个示例如何等同于第二个示例。从技术上讲,它非常清晰且完全可以理解。然而,通俗地阅读它不是有好处吗?我不是在争论任何情况——只是要求更多的意见。
  • 您完全有权选择为您回答您的问题的最佳答案。大卫也完全有权不同意您的观点。基本上,你们都是对的 :) 不要更改接受投票,除非您真的觉得我的回答更好地为您回答了这个问题。两个答案都回答了这个问题,都链接到官方来源,尽管来源不同,并且都有不同的表达方式。因此,没有一个答案比另一个更好。对于未来的访客,他们可以自己决定,这就是允许多个答案的目的。
  • 事实上,如果我敢于在这里提出一种改进答案的方法,我会将我的答案合并到蒂姆的答案中,并将其添加到他的底部,例如“另外,这是在更正式的 C# 规范中也描述了 ..." 部分,依此类推,然后完全删除我的答案。我会 ping @TimSchmelter 看看他是否这样做,否则我们将保持原样。
【解决方案2】:

这是一个资源,MSDN

then 语句中的一个或多个语句和 else 语句可以是任何类型,包括另一个 if 语句 嵌套在原始 if 语句中。 在嵌套的 if 语句中,每个 如果没有对应的else子句属于最后一个 否则

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多