投射到.NET参考源中的对象

我正在浏览.NET参考源中的OperatingSystem.cs文件,并在第50行中注明了这个代码:

if ((Object) version == null) 

version是类Version的对象,这意味着version派生自Object 。 如果是这样,是不是多余的铸造Object ? 难道这不是一样的吗?

 if (version == null) 

不,它不是等价的,因为Version重载了==运算符。

将左操作数转换为Object的片段相当于:

 if (Object.ReferenceEquals(version, null)) 

…而不是在Version调用operator==实现。 无论如何,这可能会作为无效检查的第一个动作,但这只是绕过额外的级别。

在其他情况下,这可能会产生非常显着的差异。 例如:

 string original = "foo"; string other = new string(original.ToCharArray()); Console.WriteLine(original == other); // True Console.WriteLine((object) original == other); // False