【问题标题】:C# bool expression evaluation order [duplicate]C# bool 表达式求值顺序
【发布时间】:2009-11-16 22:40:40
【问题描述】:

可能重复:
== Operator and operands

可能的重复:
Is there any difference between if(a==5) or if(5==a) in C#?
== Operator and operands

好的,这可能是个愚蠢的问题,但在谷歌中搜索(即使有引号,似乎也无法真正搜索到确切的短语)

如果两者之间有任何区别怎么办

if(false == <somecondition>){

if(<somecondition> == false){

在 C# 中?我熟悉 c# 的表达式评估,并且了解如果您执行以下操作时顺序将如何有意义:

if(AccountIsInvalid || AccountIsUnregistered)

我不需要大量的课程,但想了解为什么有些人更喜欢使用false==.... 路由。

【问题讨论】:

标签: c# evaluation boolean


【解决方案1】:

就我个人而言,我从不将任何事物与真假进行比较。

我会选择:

if (!somecondition) 

或:

if (somecondition)

【讨论】:

    【解决方案2】:

    在 C 中,可能会有一些理由这样做,因为您很容易犯错并使用赋值运算符而不是比较运算符,但在 C# 中它不应该有任何区别——您将如果您使用赋值运算符,则会收到编译警告。如果赋值是不同的类型(比如 int),则会导致错误,因为结果不是 if 语句的合法表达式。

    我更喜欢这样

    if (!<somecondition>)
    {
      ...
    }
    

    而不是与假(或真,就此而言)进行比较。

    【讨论】:

    • 这是一个警告,而不是错误:bool b; if (b = true) { Console.WriteLine("abc"); }
    • @Marc -- 感谢您的澄清。在 bool 变量的情况下,这当然是正确的。我没有考虑到这一点。我想我只是太习惯于在其他值类型的上下文中看到它——这将是一个错误。
    • 啊,很公平 ;-p 确实,Cs 倾向于将任何非零值视为真实的东西是一种痛苦。
    【解决方案3】:

    在执行任何优化或短路之前,编译器需要将&lt;somecondition&gt; 解析为truefalse 值,因此编译器没有理由评估表达式&lt;somecondition&gt; == falsefalse == &lt;somecondition&gt; any不同。

    这肯定是风格问题,而且只是风格问题。

    【讨论】:

      【解决方案4】:

      这在 C# 中并不像在 c/c++ 中那样重要,因为条件必须计算为布尔值。

      【讨论】:

      • Not quite true...它们必须隐式转换为布尔值或真正的函数。另请注意,分配的结果仍然是布尔值,并且可以工作...
      • 考虑:bool b; if (b = true) { Console.WriteLine("abc"); }
      • 确实如此,我应该说“和它一样多...”并不重要,因为您不能在 C# int i 中意外地执行以下操作;如果(我 = 0){...}
      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2021-04-24
      • 2015-12-21
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多