Sono stato codificato .net da anni a questa parte mi sento come un n00b. Perché il seguente codice non funziona?Potrebbe essere così ovvio, ma perché fallisce?
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)
Aggiornamento
Approvata la risposta da CodeInChaos. La ragione per i 16 byte che diventano 32 byte può essere letta nella sua risposta. Anche indicato nella risposta:
il costruttore di default di UTF8Encoding ha il controllo degli errori disabilitato
IMHO l'encoder UTF8 dovrebbe lanciare un'eccezione quando si cerca di codificare un array di byte a stringa che contiene i byte non validi. Per rendere il framework .NET si comportano correttamente il codice dovrebbe essere scritto come segue
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);
Grazie per esserti liberato di 'var'. È come se l'intero punto di 'var' nascondesse gli errori. :) – MusiGenesis