Преобразование byte[] -> string -> byte[]

Подскажите если не сложно.
Есть код:

string txt = "Hello World!!!+=_^%kl;sdfkljdfklgjdklff';kldfjg23459037652*(*^^&$%^#(";
byte[] data2 = Encoding.UTF8.GetBytes(txt);
string data = Encoding.UTF8.GetString(data2);
byte[] data3 = Encoding.UTF8.GetBytes(data);
Console.WriteLine(data2 == data3); // False

В итоге интересует преобразование byte[] -> string -> byte[], при отсутствии изменений ожидаемое поведение data2 = data3, а в моем коде получается что это не так. Как я понимаю при преобразовании что-то теряется, но как этого избежать?


Ответы (1 шт):

Автор решения: aepot

Массивы по содержимому можно сравнить так, с помощью Linq.

Console.WriteLine(data2.SequenceEqual(data3));

Либо написать свой метод сравнения с использованием цикла.

Через == сравниваются только ссылки на экземпляры массивов, а так как экземпляры разные, выводится False. Содержимое при этом никак не учитывается. Другими словами, для массивов == вернет true только если массив сравнивается сам с собой.

byte[] array4 = array3;
Console.WriteLine(array3 == array4); // True

Ссылочные и значимые типы.

→ Ссылка