Значение `1 в трассировке стека - PullRequest
2 голосов
/ 06 мая 2020

Какое значение имеет `1 в трассировке стека?

   at Default.Process() in Default.cs:line 19
   at Framework.BasePage.ProcessRequest(HttpContext context) in BasePage.cs:line 82
   at Framework.Endpoint`1.Page[T](HttpContext context) in Endpoint.cs:line 44
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)

Третья строка: Endpoint`1

1 Ответ

1 голос
/ 19 мая 2020

Это арность (или количество) общих c аргументов.

Причина в том, что у вас может быть несколько классов с тем же именем, но с разными количество общих c параметров. Например:

class Foo {}
class Foo<TKey> {}
class Foo<TKey, TValue> {}

Чтобы различать их, среда CLR определяет правило, согласно которому общие c типы имеют суффикс с количеством принимаемых общих c аргументов. Типы non generi c этого не требуют, поэтому их имена кодируются как:

Foo
Foo`1
Foo`2

Есть и другие символы "magi c". Например, + в имени используется для обозначения внутреннего / вложенного класса. Итак:

class Foo
{
  class Bar
  {
  }
}

В результате Bar будет закодирован как Foo+Bar.

...