我正在浏览.NET参考源中的OperatingSystem.cs文件,并在第50行注意到这段代码:
if ((Object) version == null)
Run Code Online (Sandbox Code Playgroud)
version是一个类的对象Version,这意味着version派生自Object.如果是这样,是不是多余的铸造Object?这不是一样的吗?
if (version == null)
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 90
不,它不等同 - 因为操作员Version超载==.
将左操作数转换为的代码段Object相当于:
if (Object.ReferenceEquals(version, null))
Run Code Online (Sandbox Code Playgroud)
...而不是调用operator==实现Version.无论如何,这可能会使无效检查成为它的第一个动作,但这只是绕过了额外的水平.
在其他情况下,这可以产生非常显着的差异.例如:
string original = "foo";
string other = new string(original.ToCharArray());
Console.WriteLine(original == other); // True
Console.WriteLine((object) original == other); // False
Run Code Online (Sandbox Code Playgroud)