C#bool表达式评估顺序

时间:2009-11-16 22:40:40

标签: c# evaluation boolean

  

可能重复:
  == 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==....路线做事。

4 个答案:

答案 0 :(得分:3)

就个人而言,我从未将任何事情与虚假或真实进行比较。

我会选择:

if (!somecondition) 

或:

if (somecondition)

答案 1 :(得分:3)

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

我希望它是

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

而不是与false的比较(或者就此而言是真实的。)

答案 2 :(得分:1)

在执行任何优化或短路之前,编译器需要将<somecondition>解析为truefalse值,因此编译器没有理由评估表达式{{ 1}}和<somecondition> == false任何不同。

这肯定是风格和风格的问题。

答案 3 :(得分:0)

这与C / c ++中的C#无关,因为条件必须求值为布尔值。