2010-09-21 11 views
5

Tengo una excepción lanzada por una aplicación WPF. El mensaje es:¿Qué es el sufijo de tipo "+ <> c__DisplayClassX" donde X es un número?

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

El problema es que el tipo no se puede serializar. Pero ese tipo se autogenera, tal vez un método o árbol de expresión anónimo. ¿Alguien sabe el origen exacto de este tipo de tipos para saber dónde encontrar el error?

Respuesta

3

Los tipos con ese tipo de nombre se generan cuando se escribe un método anónimo (utilizando la sintaxis delegate o una expresión lambda) que captura una variable local. El papel de estos tipos es mantener los valores de las variables capturadas

nota de que otra clase de tipos generadas tienen diferentes nombres:

  • tipos anónimos tienen nombres como <>f__AnonymousType0<<a>j__TPar, <b>j__TPar> (generada por new { a = 1, b = "2" }).
  • iteradores también generan nuevos tipos como <ZipIterator>d__0<TFirst, TSecond, TResult> (nótese el nombre del método iterador entre los paréntesis angulares)

Por lo que yo sé, no hay ninguna regla documentado para la denominación de los tipos generados, por lo que usted no debe Confíe en estas observaciones en su código. Solo los estoy mencionando para que estén completos.

+0

Eso es! Gracias. –

Cuestiones relacionadas