Типы с таким именем создаются, когда вы пишете анонимный метод (с использованием синтаксиса delegate
или лямбда-выражения), который захватывает локальную переменную. Роль этих типов состоит в том, чтобы хранить значения захваченных переменных
Обратите внимание, что другие типы генерируемых типов имеют разные имена:
- анонимные типы имеют имена типа
<>f__AnonymousType0<<a>j__TPar, <b>j__TPar>
(генерируется new { a = 1, b = "2" }
).
- Итераторы также генерируют новые типы, такие как
<ZipIterator>d__0<TFirst, TSecond, TResult>
(обратите внимание на имя метода итератора в угловых скобках)
Насколько мне известно, не существует документированного правила именования сгенерированных типов, поэтому вы не должны полагаться на эти наблюдения в своем коде. Я просто упоминаю их для полноты.