2016-02-12 103 views
0

C#中的object x = nullobject x = (object) null和有什麼區別?object x = null和object x =(object)null有什麼區別?

編輯 - 我沒有親自使用過這段代碼。我想知道如何打開MVC路由處理this瞭解它,並發現它使用(object) null。所以想知道區別。

+0

你有沒有注意到任何區別,當你同時運行的代碼? – Eser

+0

Eser我編輯了問題以添加更多詳細信息。 – RAM

+0

我不知道爲什麼有人投下了這個問題。我不知道區別,如果沒有區別,爲什麼MVC框架將null轉換爲object? – RAM

回答

3

在你提供的(爲什麼它被使用像在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) 
2

沒什麼。

Visual Studio甚至可能會告訴你,顯式轉換是多餘的。

0

兩者都沒有區別將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); 
} 
相關問題