2010-09-21 6 views
5

Ho un'eccezione generata da un'applicazione WPF. Il messaggio è:Qual è il suffisso di tipo "+ <> c__DisplayClassX" dove X è un numero?

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

Il problema è che il tipo non può essere serializzato. Ma quel tipo viene generato automaticamente, forse un metodo anonimo o un albero di espressioni. Qualcuno conosce l'origine esatta di questi tipi di tipi per sapere dove trovare l'errore?

risposta

3

I tipi con questo tipo di nome vengono generati quando si scrive un metodo anonimo (utilizzando la sintassi delegate o un'espressione lambda) che acquisisce una variabile locale. Il ruolo di questi tipi è quello di tenere i valori delle variabili catturati

notare che altri tipi di tipi generati hanno nomi diversi:

  • tipi anonimi hanno nomi come <>f__AnonymousType0<<a>j__TPar, <b>j__TPar> (generato da new { a = 1, b = "2" }).
  • iteratori generano anche nuovi tipi come <ZipIterator>d__0<TFirst, TSecond, TResult> (notare il nome del metodo iteratore tra le parentesi angolari)

Per quanto ne so, non c'è una regola documentato per la denominazione dei tipi generati, in modo da shouldn si basano su queste osservazioni nel codice. Li sto solo citando per completezza.

+0

Questo è! Grazie. –

Problemi correlati