2009-11-16 135 views
1

Possible Duplicate:
== Operator and operandsC#布尔表达式求值顺序

Possible Duplicates:
Is there any difference between if(a==5) or if(5==a) in C#?
== Operator and operands

好吧,这可能是愚蠢的问题,但在谷歌搜索(不能似乎实际搜索即使报价精确短语)

如果什么什么差别有

之间

if(false == <somecondition>){

if(<somecondition> == false){

in C#?我熟悉C#的表情评价;以及了解秩序将如何明智的,如果你在做一样的东西:

if(AccountIsInvalid || AccountIsUnregistered)

我不需要一个巨大的教训,但想明白为什么有些人喜欢做与false==....路线的东西。

+4

很多...的重复...现在看... – 2009-11-16 22:43:08

+2

当然,使用'if(!)'并且它变成一个非问题; -p – 2009-11-16 22:43:51

+0

一个重复在这里 - http://stackoverflow.com/questions/797162/is-there-any-difference-between-ifa5-or-if5a-in-c-closed – ChrisF 2009-11-16 22:45:23

回答

3

就我个人而言,我从不比较任何错误或真实。

我会去:

if (!somecondition) 

或:

if (somecondition) 
3

在C便有可能出现,也许,某种原因,要做到这一点,你可以很容易地犯了一个错误,并使用赋值运算符而不是比较运算符,但在C#中它不应该有任何区别 - 如果使用赋值运算符,则会收到编译警告。如果赋值是一个不同的类型(比如int),那么会导致错误,因为结果不会是if语句的合法表达式。

我宁愿它是

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

,而不是一个比较虚假的(或真实的,对于这个问题)。

+0

这是一个警告,不是一个错误:'bool b; if(b = true){Console.WriteLine(“abc”); }' – 2009-11-16 22:50:26

+0

@Marc - 感谢您的澄清。这在bool变量的情况下肯定是正确的。我没有考虑过。我想我太习惯于在其他值类型的环境中看到它 - 这将是一个错误。 – tvanfosson 2009-11-16 22:54:40

+0

啊,够公平的; --p事实上,C中倾向于把任何非零的东西视为真实是一种痛苦。 – 2009-11-16 22:57:07

0

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

+0

不*完全*真实的...他们必须有一个隐式转换为布尔值,或一个真正的函数。还要注意,赋值的结果仍然是bool,并且工作... – 2009-11-16 22:48:06

+0

考虑:'bool b; if(b = true){Console.WriteLine(“abc”); }' – 2009-11-16 22:50:58

+0

真的够了,我应该说没关系,“尽可能多”,因为你不能在C#中意外执行以下操作: int i; if(i = 0){...} – 2009-11-16 23:56:29

1

进行任何优化或短路之前,编译器需要解决<somecondition>truefalse值,因此没有理由为什么编译器会计算表达式<somecondition> == falsefalse == <somecondition>任何不同。

这肯定只是一个风格和样式的问题。