Что такое суффикс типа "+ <> c__DisplayClassX", где X - это число? - PullRequest
5 голосов
/ 22 сентября 2010

У меня есть исключение, выданное приложением WPF. Сообщение:

Type 'MyNamespacesPath.AType+<>c__DisplayClass5' in Assembly... is not marked as serializable

Проблема в том, что тип не может быть сериализован. Но этот тип генерируется автоматически, может быть, анонимный метод или дерево выражений. Кто-нибудь знает точное происхождение этих типов, чтобы знать, где найти ошибку?

1 Ответ

3 голосов
/ 22 сентября 2010

Типы с таким именем создаются, когда вы пишете анонимный метод (с использованием синтаксиса delegate или лямбда-выражения), который захватывает локальную переменную. Роль этих типов состоит в том, чтобы хранить значения захваченных переменных

Обратите внимание, что другие типы генерируемых типов имеют разные имена:

  • анонимные типы имеют имена типа <>f__AnonymousType0<<a>j__TPar, <b>j__TPar> (генерируется new { a = 1, b = "2" }).
  • Итераторы также генерируют новые типы, такие как <ZipIterator>d__0<TFirst, TSecond, TResult> (обратите внимание на имя метода итератора в угловых скобках)

Насколько мне известно, не существует документированного правила именования сгенерированных типов, поэтому вы не должны полагаться на эти наблюдения в своем коде. Я просто упоминаю их для полноты.

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