Что-то вроде:
Span<Message> valSpan = stackalloc Message[1];
valSpan[0] = new Message { Header = 123, Data = 456 };
Span<byte> bytes = MemoryMarshal.Cast<Message, byte>(valSpan); // has length 8
Обратите внимание, что я использую Span<T>
здесь.При необходимости вы можете делать в основном то же самое с Memory<T>
, но вам нужен резервный массив или аналогичный, который обычно требует выделения - если не массива, то пользовательского MemoryManager<T>
:
var arr = new Message[1];
arr[0] = new Message { Header = 123, Data = 456 };
Memory<byte> bytes = MemoryMarshal.Cast<Message, byte>(arr); // has length 8
По сути, вы здесь очень близки:
MemoryMarshal.CreateReadOnlySpan(ref message, 1)
Хитрость заключается в том, чтобы использовать MemoryMarshal.Cast<TFrom, byte>(...)
для получения диапазона байтов.