C#中的object x = null
和object x = (object) null
和有什麼區別?object x = null和object x =(object)null有什麼區別?
編輯 - 我沒有親自使用過這段代碼。我想知道如何打開MVC路由處理this瞭解它,並發現它使用(object) null
。所以想知道區別。
C#中的object x = null
和object x = (object) null
和有什麼區別?object x = null和object x =(object)null有什麼區別?
編輯 - 我沒有親自使用過這段代碼。我想知道如何打開MVC路由處理this瞭解它,並發現它使用(object) null
。所以想知道區別。
在你提供的(爲什麼它被使用像在ASP.NET源代碼)的答案是具體的例子:是的,它的確與衆不同的(object)
投是否存在與否。
我們有這樣的方法:
public static Route MapRoute(this RouteCollection routes, string name, string url)
{
return MapRoute(routes, name, url, null /* defaults */, (object)null /* constraints */);
}
讓我們假設我們這樣稱呼它:
RouteCollection.MapRoute(routes, "SomeName", "SomeUrl");
因爲(object)null
鑄是這個方法,下面的方法將被調用:
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints)
{
return MapRoute(routes, name, url, defaults, constraints, null /* namespaces */);
}
因爲最後一個參數是明確的object
(我們鑄造到那)。
沒有投下面的方法將被稱爲:
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces)
{
return MapRoute(routes, name, url, defaults, null /* constraints */, namespaces);
}
所以基本上,演員陣容有作爲輔助選擇在不太具體的更具體的方法。
你可以用一個簡單的例子測試自己吧:
public static class TestClass
{
public static void TestMethod(object parameter)
{
}
public static void TestMethod(string[] parameter)
{
}
}
然後調用:
TestClass.TestMethod(null); // will call TestMethod(string[] parameter)
TestClass.TestMethod((object)null); // will call TestMethod(object parameter)
沒什麼。
Visual Studio甚至可能會告訴你,顯式轉換是多餘的。
兩者都沒有區別將x設置爲null。
public static void Main()
{
object a = (object)null; // casts null to object basically creating a null object and assigning it to a making it null
object b = null; // directly assigns b the value of null
Console.WriteLine(a == b);
}
將null轉換爲對象時可能會有微不足道的開銷,而不是將其設置爲null。
https://dotnetfiddle.net/elilu7
爲了進一步確認,沒有任何區別,並使用有機磷農藥參考微軟自己的代碼在System.Web.Mvc.RouteCollectionExtensions.cs,這將增加有效性OP的問題:
//This method cast to object
public static Route MapRoute(this RouteCollection routes, string name, string url)
{
return MapRoute(routes, name, url, null /* defaults */, (object)null /* constraints */);
}
//This method does not
public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces)
{
return MapRoute(routes, name, url, null /* defaults */, null /* constraints */, namespaces);
}
你有沒有注意到任何區別,當你同時運行的代碼? – Eser
Eser我編輯了問題以添加更多詳細信息。 – RAM
我不知道爲什麼有人投下了這個問題。我不知道區別,如果沒有區別,爲什麼MVC框架將null轉換爲object? – RAM