Общий 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 тип?

Спасибо!

Ответы на вопрос(5)

Ваш ответ на вопрос