У меня есть двоичный сериализованный объект в памяти, и я хочу прочитать его из памяти, используя указатели (небезопасный код) в С#. Пожалуйста, посмотрите на следующую функцию, которая читает из потока памяти.
static Results ReadUsingPointers(byte[] data)
{
unsafe
{
fixed (byte* packet = &data[0])
{
return *(Results*)packet;
}
}
}
В этом операторе return *(Results*)packet;
я получаю исключение времени компиляции "Невозможно получить адрес, получить размер или объявить указатель на результаты управляемого типа"
Вот моя структура
public struct Results
{
public int Id;
public int Score;
public char[] Product;
}
Насколько я понимаю, все свойства моей структуры являются преобразовываемыми свойствами, тогда почему я получаю эту ошибку и что мне делать, если мне нужно использовать char[] в моей структуре?
EDIT-1 Позвольте мне объяснить подробнее (обратите внимание, что объекты являются макетами)...
Предыстория: у меня есть массив объектов Results
, я сериализовал их с помощью двоичной сериализации. Теперь, на более поздних этапах моей программы, мне нужно как можно быстрее десериализовать свои данные в памяти, так как объем данных очень велик. Поэтому я пытался узнать, как небезопасный код может мне помочь.
Допустим, если моя структура не включает public char[] Product;
, я получаю свои данные с достаточно хорошей скоростью. Но с char[] это дает мне ошибку (компилятор должен это сделать). Я искал решение, которое работает с char[] в этом контексте.