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!