2010-09-21 2 views
5

Ich habe eine Ausnahme von einer WPF-Anwendung ausgelöst. Die Nachricht lautet:Was ist das Suffix "+ <> c__DisplayClassX", wobei X eine Zahl ist?

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

Das Problem ist, dass der Typ nicht serialisiert werden kann. Aber dieser Typ ist automatisch generiert, vielleicht eine anonyme Methode oder Ausdrucksbaum. Wer kennt die genaue Herkunft dieser Arten von Typen, um zu wissen, wo der Fehler zu finden ist?

Antwort

3

Typen mit dieser Art von Namen werden generiert, wenn Sie eine anonyme Methode (unter Verwendung der delegate-Syntax oder eines Lambda-Ausdrucks) schreiben, die eine lokale Variable erfasst. Die Rolle dieser Arten ist, die Werte der erfassten Variablen zu halten

Beachten Sie, dass andere Art von generierten Typen haben unterschiedliche Namen:

  • anonyme Typen haben Namen wie <>f__AnonymousType0<<a>j__TPar, <b>j__TPar> (erzeugt durch new { a = 1, b = "2" }).
  • Iteratoren auch neue Typen wie <ZipIterator>d__0<TFirst, TSecond, TResult> (man beachte den Namen des Iteratormethode zwischen den spitzen Klammern)

Was erzeugen, wie ich weiß, gibt es keine dokumentierten Regel für die Benennung der generierten Typen, so shouldn Sie Verlasse dich nicht auf diese Beobachtungen in deinem Code. Ich erwähne sie nur aus Gründen der Vollständigkeit.

+0

Das ist! Vielen Dank. –