何年も前に.netをコーディングしていましたが、n00bのように感じます。次のコードが失敗するのはなぜですか?それははっきりしているはずですが、なぜこれは失敗しますか?
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)
アップデートはCodeInChaosからの回答を承認しました。彼の答えでは、32バイトになる16バイトの理由を読み取ることができます。また、その答えに次のように述べた。
UTF8Encodingのデフォルトコンストラクタは無効なバイトを含む文字列をバイト配列をエンコードしようとすると、UTF8エンコーダが例外をスローする必要私見 無効
エラーチェックがあります。 .netフレームワークが適切に動作するようにするには、次のようにコードを記述する必要があります。
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);
「var」を削除していただきありがとうございます。まるで 'var'の全体がエラーを隠すようになっているかのようです。 :) – MusiGenesis