2010-08-12 14 views
10

Me encontré con este problema hoy y pude determinar que, al realizar la limpieza del código, R # no convertirá las propiedades de tener campos de respaldo en propiedades automáticas en clases que están decoradas con SerializableAttribute, p. Ej.Resharper no se convierte automáticamente en propiedades automáticas en clases serializables, ¿debería?

using System; 

namespace DataContracts 
{ 
    [Serializable] 
    public class Class1 
    { 
     private bool _wontChange; 

     public bool WontChange 
     { 
      get { return _wontChange; } 
      set { _wontChange = value; } 
     } 
    } 
} 

El código anterior no se cambiará durante la limpieza automática del código. Por supuesto, puedo hacer esto manualmente, y sigo teniendo la opción de menú de acción rápida de R # para hacerlo a nivel de propiedad individual. Pero me pregunto si hay un problema subyacente que no conozco al usar propiedades automáticas en las clases [Serializable].

En el JetBrains forum thread nos referimos a an issue en el que se trata este problema, pero no parece resolverse definitivamente.

+0

Usted dice que puede usar el "menú de acción rápida" para hacer el trabajo. La opción simplemente no está allí. Y cuando elimino el atributo serializable, todo está bien. – Samuel

Respuesta

11

Cuando serializa objetos, los nombres de campo, etc. comienzan a importar, porque la mayoría de los mecanismos de serialización utilizan los nombres de campo para restaurar los datos serializados. Ahora cuando cambia el nombre de campo, no puede leer las versiones serializadas más antiguas correctamente.

Al convertir a propiedades automáticas, el campo de respaldo tendrá un nombre generado automáticamente, que no coincide con el nombre anterior. Por lo tanto, esto podría presentar un problema potencial al leer datos antiguos serializados.

Supongo que para evitar este inconveniente, R # no lo cambia automáticamente a una propiedad automática si la clase está marcada como serializable.

+0

Supongo que esto no sería un problema con los objetos que se serializaron y deserializaron desde la misma DLL: los campos de respaldo se definirían estáticamente dentro de la DLL. ¿Es eso una suposición válida? – arootbeer

+1

Nunca me he encontrado con este problema descrito con propiedades automáticas y serialización. He leído el error R # https://youtrack.jetbrains.com/issue/RSRP-63531 en este y, por lo tanto, no hay evidencia provista. ¿Lo muestra en acción? ¿Dónde está el proyecto reproducible? ¿Fue esto un problema en los días CLR1 y CLR2? ¿Se corrigió en una actualización posterior de CLR 2 o en CLR 4? –

+0

Muchas gracias. Sería bueno tener este tipo de funcionalidad documentada en su sitio web. – Samuel

Cuestiones relacionadas