Ogólna metoda podobna do BitConverter?

Niedawno napotkałem sytuację, w której muszę utworzyć ogólną metodę odczytu typu danych z tablicy bajtów.

Stworzyłem następującą klasę:


public class DataStream
{
    public int Offset { get; set; }

    public byte[] Data { get; set; }

    public T Read<T>() 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;
        }
    }
}

Teraz, pomijając problemy z rozdysponowaniem, ten kod nie kompiluje się z tym komunikatem:

Cannot take the address of, get the size of, or declare a pointer to a managed type ('T')

Co wydaje się dziwne, ponieważ powinieneś być w stanie wykonać powyższe operacje na podstawiewhere T : struct ograniczenie metody.

Jeśli ten kod jest strasznie niepoprawny, czy jest jakiś prosty sposób na pobranie serii bajtów i rzucenie ich w 'T' rodzaj?

Dzięki!

questionAnswers(5)

yourAnswerToTheQuestion