2012-06-26 252 views
0

可能重复:
What is wrong in comparing a null with an object rather than an object with a null
空==对象VS对象== NULL

我看到一些开发人员使用以下空对象在C#中检查:

if (null == myObject) 
{ 

} 

而不是:

if (myObject == null) 
{ 

} 

我更喜欢第二种说法,因为它自然地(对我来说)从左到右地读取。

是否有任何理由为什么第一个会被使用?是否有任何性能优势,还是纯粹的品味?

+4

没有任何。我更喜欢第二个人。 – Dimitri

+1

有一个类似的问题,确实很重要。 myString.equals(“”),而不是“”.equals(myString);第二个保证你永远不会试图在一个空变量上调用一个函数。 myString可以为null并在第一个崩溃,但等于(null)不会导致崩溃 –

+0

我听说过这些称为“yoda条件”(如在“null,我的对象是”):) –

回答

10

有些人(大多数是C开发者)喜欢第一种方式,因为如果你忘记了一个=符号的代码不会编译C.

例如,当我忘记一个=;

int a = 0; 

if(a=1) //Accidental assignment, luckily the C# compiler warns us for this. The C compiler wouldnt. 
{ 

}  
if(1=a) // This is not logical, and not valid in either C# or C. 
{ 

} 

然而,随着Jamietre指出,与C公司在C#中无效的隐式转换为int到布尔值。编译器仍然产生错误。但是,当您比较布尔值时,它会起作用:if(a == true)。然而,这本身很奇怪,因为你可以(并且应该在我看来)省略== true

+4

C#不会编译任何一个。考虑到这一点,我认为把你正在测试的东西放在C#中会更好,因为这是阅读大多数人的代码的更自然的方式,并且没有风险。 (但当然要么是完全有效的...归结为偏好。) –

+0

谢谢,添加了一个旁注。 – TJHeuvel

+0

不,在C#中第一个不会编译。编译器将停止在该行上的“不能隐式转换类型'int'到'bool'”。 –

0

纯正的味道,与昏迷,支架等相同

2

纯粹的口感。他们都会返回完全一样的东西。