2011-10-25 18 views
4

我注意到最近在ASP.NET錯誤堆棧跟蹤對於Microsoft創建的類,「1」或「2」後綴意味着什麼?

System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264 

下面一行是什麼在IDictionary`2`2是什麼意思?

我還發現一個名爲像其他類/文件在codeplex repository of ASP.NET MVC

+0

半重複http://stackoverflow.com/questions/1369294/why-are-the-names-of-generic-types-mangled-in-a-net-堆棧跟蹤/ 1369303#1369303不同的問題,但相同的答案 – xanatos

回答

4

它來表示泛型參數。例如看看這個反射代碼:

var type = typeof(Dictionary<string, string>).GetInterface("IDictionary`2"); 
+0

尤其是,它顯示了* number *的泛型類型參數。 –

2

在.NET中,這是有效的:的泛型參數「的變化」

class X<T> 
{ 
} 

class X<T, U> 
{ 
} 

類的名稱。因此,您看到的數字是參數的數量(使用更簡單的詞語:類/接口/結構可以在通用參數的數量上「過載」,因此您可以有IEnumerableIEnumerable<T>。)

這些類是所謂X`1X`2,你將有

typeof(X<>).Name == "X`1"; 
typeof(X<,>).Name == "X`2"; 

注意,名泛型參數不「變」之類的名稱。前面的兩個定義後,這一次將是無效的:

class X<U> 
{ 
} 
1

官方的功能介紹:

public override object Execute(ControllerContext controllerContext, IDictionary<string, object> parameters) 

正如你所看到的類型是IDictioray<,>日「2是一個通用的文字說明採取2種類型。 List'1例如是列表<>

相關問題