2014-03-06 32 views
-1

我试图检查参数是否为null,我发现在我的脑海的一个问题: 有什么区别:之间的差异(目标)O == NULL和(((对象)O)== NULL

if ((object) o == null) ... 

if (((object) o) == null) ... 

编辑:变量o可以是任何引用类型的(具有重载==操作上不)

+8

没什么区别,铸造之前比较 – Andrei

+0

这只是一种风格上的差异,代码是等价的。与'=='相比,Casting具有更高的运算符优先级。对于那些不记忆优先表的人来说,明确的括号更容易理解。 – CodesInChaos

+9

那么,示例2不会编译,因为它具有不平衡的'()'。 –

回答

2
if ((object) o) == null) ... 

是一个错误。也许你想写

if (((object) o) == null) ... 

所以你投oObject那么你测试是否等于null

这是除了在if (((object) o) == null) ...你与()

使其明确(对人友好的)同样的事情

所有这些符号完成相同的测试。

+0

所以在生成的IL中没有任何区别? – zgnilec

+0

没什么区别!如果(o == null)' – Bellash

+1

如果(o == null)使用运算符==在对象o上,如果它已经重载了那个运算符 – zgnilec

-2

两者都是相同的。

第一种情况 - 在铸造前进行比较。首先将它与null比较,然后转换为Object。

第二种情况 - 铸造比较前。首先它会将o转换为Object,然后将其与null进行比较。

+0

怎么回事?铸造总是在比较之前出现。 – Bellash

+0

我没有得到你的问题.. – Arjit

+0

我的意思是铸造具有较高的运算符优先级比'=='运算符。在所有情况下,即使没有'()',比较之前也会进行比较。 – Bellash

相关问题