Ha estado codificando .net desde hace años pero me siento como un n00b. ¿Por qué falla el siguiente código?Debería ser tan obvio, pero ¿por qué no funciona?
byte[] a = Guid.NewGuid().ToByteArray(); // 16 bytes in array
string b = new UTF8Encoding().GetString(a);
byte[] c = new UTF8Encoding().GetBytes(b);
Guid d = new Guid(c); // Throws exception (32 bytes recived from c)
actualización
Aprobada la respuesta de CodeInChaos. La razón de los 16 bytes que se convierten en 32 bytes se puede leer en su respuesta. También se indica en la respuesta:
el constructor por defecto de UTF8Encoding tiene comprobación de errores discapacitados
mi humilde opinión el codificador UTF-8 debe lanzar una excepción cuando se trata de codificar una matriz de bytes en cadena que contiene bytes no válidos. Para hacer el marco .NET comportarse adecuadamente el código debe haber sido escrito de la siguiente manera
byte[] a = Guid.NewGuid().ToByteArray();
string b = new UTF8Encoding(false, true).GetString(a); // Throws exception as expected
byte[] c = new UTF8Encoding(false, true).GetBytes(b);
Guid d = new Guid(c);
Gracias por deshacerse de 'var'. Es como si todo el punto de 'var' fuera a ocultar errores. :) – MusiGenesis