【问题标题】:What does the `1 or `2 suffix mean for classes created by Microsoft?`1 或 `2 后缀对于 Microsoft 创建的类意味着什么?
【发布时间】:2011-10-25 09:27:22
【问题描述】:
我最近在 ASP.NET 错误堆栈跟踪中注意到以下行
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
`2 中的IDictionary`2 是什么意思?
我还在codeplex repository of ASP.NET MVC中找到了其他类似命名的类/文件
【问题讨论】:
标签:
.net
asp.net-mvc
coding-style
【解决方案1】:
表示泛型参数。例如看看这个反射代码:
var type = typeof(Dictionary<string, string>).GetInterface("IDictionary`2");
【解决方案2】:
在 .NET 中这是有效的:
class X<T>
{
}
class X<T, U>
{
}
泛型参数的编号“改变”了类的名称。所以你看到的数字是参数的数量(用更简单的词:类/接口/结构可以在泛型参数的数量上“重载”,所以你可以有IEnumerable和IEnumerable<T>。)
这些类将被称为 X`1 和 X`2,而您将拥有
typeof(X<>).Name == "X`1";
typeof(X<,>).Name == "X`2";
请注意,泛型参数的 name 不会“更改”类的名称。在前两个定义之后,这个将是无效的:
class X<U>
{
}
【解决方案3】:
官方功能说明是:
public override object Execute(ControllerContext controllerContext, IDictionary<string, object> parameters)
如您所见,类型为IDictioray<,> Th '2 是对具有 2 种类型的泛型的文本描述。 List'1 例如是一个 List