【问题标题】:How to have multiple and statements in c#如何在c#中有多个and语句
【发布时间】:2014-05-18 12:06:11
【问题描述】:

我正在做一个频率分析,我希望它能够自动切换字母。我知道要切换到什么,但你能有你的代码吗:

if(a > b && a > c && a > c) { //code }

有人告诉我,如果 a > b,它不会评估其余代码。这是真的吗?

【问题讨论】:

  • 它不会评估a < b,而不是其他人想要的。这叫做短路。

标签: c# operators


【解决方案1】:

当 .Net 计算 && 时,它使用 short-circuiting:它检查第一个表达式 (a > b) 和 如果它 false 什么都不做,如果 true 检查第二个 (a > c) 等,那么你的情况

  if(a > b && a > c && a > d) { //code }

等于

  if (a > b) 
    if (a > c)
      if (a > d) { //code }

【讨论】:

    【解决方案2】:
    if(a > b && a > c && a > c)
    

    如果a > b 为假,则不会验证a > c。因为两者都必须为真才能执行代码。但是如果a > b 为真,那么它也会检查a > c

    另外,a > c 两次是没有意义的。

    如果只有一个比较必须为真,您可以使用|| 运算符。

    【讨论】:

    • 谢谢,我不是故意要加进去的。把第二个 c 想象成 d。
    • 我有一种感觉:)只是想指出来。
    【解决方案3】:

    实际上这被称为短路评估,其中不同的语句之间有 AND 运算符,如果一个语句为假,C# 运行时会将整个表达式评估为假,然后忽略其余的语句评估。

    如果您想要计算所有表达式而不管每个表达式的结果如何,请使用单个 & 而不是两个 &&。它将逐位比较它们,并强制评估所有语句以确定最终结果。

    if(a > b && a > c && a > c)
    

    改为

    if(a > b & a > c & a > c)//it will evaluate all the conditions before the final result
    

    更多信息请查看: LINK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多