62
我打算通過OperatingSystem.cs文件在.NET參考源,並指出該代碼在line 50:鑄造在.NET參考源到對象
if ((Object) version == null)
version
是Version
類的一個對象,這意味着version
導出從Object
。如果是這樣,是不是多餘的鑄造到Object
?難道不是這樣嗎?
if (version == null)
我打算通過OperatingSystem.cs文件在.NET參考源,並指出該代碼在line 50:鑄造在.NET參考源到對象
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
@afaolek:無需經過源代碼 - 只需查看文檔,您就會看到相等運算符。 –
在你的答案中使用樣本,Console.WriteLine((對象)原始==(對象)其他)的結果是什麼;'? – afaolek
@afaolek:再次假 - 這不會改變任何東西,因爲它基本上仍然會使用參考比較。 –