2009-11-07 10 views
5

Ayer encontré un error en el framework .Net y encontré que es un error conocido que no se solucionará. En resumen, el fallo es que una clase que contiene un campo de la IComparable tipo no puede ser binarios y serializados deserializado cuando un int (y posiblemente otros tipos binarios) se asignan a ese campo:¿Debería solucionarse este error?

[Serializable] 
public class Foo 
{ 
    public IComparable Value; 
} 

Si intenta serializar (y deserializar) los dos objetos siguientes el primero tendrá éxito y el segundo fallará:

var s = new Foo { Value = "foo" }; 
var i = new Foo { Value = 1 }; 

que describen con más detalle aquí: http://ondevelopment.blogspot.com/2009/11/fix-that-bug-will-ya-no.html

y el informe de error se puede encontrar aquí (tenga en cuenta que este informe es de 2006 y no lo he presentado): http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=91177

Esto no se solucionará porque "el riesgo de la solución supera su beneficio". No veo ningún escenario (valioso) en el que esto sea un cambio radical. Entonces mi verdadera pregunta es, ¿alguien puede pensar en un escenario real donde este sería un cambio radical?

+0

Funciona correctamente con Mono/gmcs 2.0.1. – Thomas

+0

@Thomas, eso es interesante. En realidad, esto podría ser archivado como un error con el equipo de Mono, ya que, por lo que yo sé, intentan reflejar los errores en el BCL. –

+0

Microsoft nunca ha sido muy bueno en hacer cambios en ninguno de sus sistemas, lo que podría potencialmente romper cualquier software preexistente que dependa de lo viejo (¡hellooo, hinchazón de los sistemas operativos!). Creo que de hecho tendrías que cambiar de alguna manera a toda la compañía para arreglar esto. – Esko

Respuesta

1

no veo ningún escenario (feesible) donde esto sería un cambio importante

no creo que no habría ningún cambio importante intencional, pero hay otros riesgos que implica corregir errores eso podría introducir regresión.

Su ejemplo parece artificial, por lo que creo que llegaron a la conclusión de que los riesgos superaban a los beneficios. También le dieron la oportunidad de contactar a PSS si esto realmente le causa un problema.

+0

No fui yo quien archivó el error, como puede ver, el informe de error tiene cuatro años. No es un gran problema para mí, solo me interesan los problemas que podría ocasionar la corrección de errores. No insinúo de ninguna manera que están equivocados, solo digo que no se me ocurre un escenario en el que sea un cambio radical y tengo curiosidad por ver si alguien más puede hacerlo. –

+0

"No puedo pensar en un escenario en el que sea un cambio radical": los aspectos internos de cómo se implementa la serialización son complejos, y no es necesario crear un escenario para comprender que el código complejo cambiante tiene riesgos. – Joe

+0

¿Cómo se construye mi ejemplo? El ejemplo aquí en la pregunta es un simple error repro, revisa la publicación del blog para una descripción más detallada de un problema real.Lo que estás diciendo es que tienen miedo de solucionar este problema porque podría romper algo completamente sin relación. Sin consultar el origen de la implementación de la serialización binaria, no puedo decirte si creo que es probable o no. Pero para mí eso parece ser una contribución. –

2

Mi apuesta sería que han hecho algunas optimizaciones muy artificiales en el caso de tipos nativos como int para la serialización o incluso otras partes del sistema.

Deshaciendo que podría ser arriesgado en cuanto a corrección o regresiones de rendimiento, o ambos.

Cuestiones relacionadas