在.NET参考源中转换为对象

时间:2015-09-23 10:02:38

标签: c# .net object

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

if ((Object) version == null)

version是类Version的对象,这意味着version派生自Object。如果是这样的话,那么它是否会被Object多余的投射?它不会和它一样吗?

if (version == null)

1 个答案:

答案 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