我正在浏览.NET参考源中的OperatingSystem.cs文件,并在line 50中注明了这段代码:
if ((Object) version == null)
version
是类Version
的对象,这意味着version
派生自Object
。如果是这样的话,那么它是否会被Object
多余的投射?它不会和它一样吗?
if (version == null)
答案 0 :(得分:91)
不,它不等同 - 因为Version
会重载==
运算符。
将左操作数强制转换为Object
的代码段相当于:
if (Object.ReferenceEquals(version, null))
...而不是在operator==
中调用Version
实现。无论如何,这可能会使无效检查成为它的第一个动作,但这只是绕过额外的水平。
在其他情况下,这可能会产生非常显着的差异。例如:
string original = "foo";
string other = new string(original.ToCharArray());
Console.WriteLine(original == other); // True
Console.WriteLine((object) original == other); // False