Общий BitConverter-подобный метод?
Недавно я столкнулся с ситуацией, когда мне нужно создать универсальный метод для чтения типа данных из байтового массива.
мы создали следующий класс:
public class DataStream
{
public int Offset { get; set; }
public byte[] Data { get; set; }
public T Read() where T : struct
{
unsafe
{
int dataLen = Marshal.SizeOf( typeof( T ) );
IntPtr dataBlock = Marshal.AllocHGlobal( dataLen );
Marshal.Copy( Data, Offset, dataBlock, dataLen );
T type = *( ( T* )dataBlock.ToPointer() );
Marshal.FreeHGlobal( dataBlock );
Offset += dataLen;
return type;
}
}
}
Теперь, в стороне от проблем с выделением ресурсов, этот код нескомпилировать с этим сообщением:
Cannot take the address of, get the size of, or declare a pointer to a managed type ('T')
Что, кажется странным, потому что вы должны быть в состоянии сделать вышеуказанные операции на основеwhere T : struct
ограничение на метод.
Если этот код ужасно неправильный, есть ли простой способ взять серию байтов и преобразовать их в ''T
тип?
Спасибо!