投射到.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