Что означает суффикс `1 или` 2 для классов, созданных Microsoft? - PullRequest
4 голосов
/ 25 октября 2011

Недавно я заметил следующую строку в трассировке стека ошибок ASP.NET

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

Что означает `2 в IDictionary`2?

Я также нашел другие классы / файлы, названные так в хранилище кодеков ASP.NET MVC

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Это указывает на общие параметры.Например, взгляните на этот код отражения:

var type = typeof(Dictionary<string, string>).GetInterface("IDictionary`2");
2 голосов
/ 25 октября 2011

В .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";

Обратите внимание, что имя общих параметров не "меняет" имя класса. После двух предыдущих определений это будет недействительным:

class X<U>
{
}
1 голос
/ 25 октября 2011

Официальное описание функции:

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

Как видите, тип: IDictioray<,> Th '2 - это текстовое описание универсального набора 2 типов. Например, List'1 - это List <>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...