Недавно я столкнулся с ситуацией, когда мне нужно создать общий метод для чтения типа данных из байтового массива.Общий метод BitConverter?
Я создал следующий класс:
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;
}
}
}
Теперь вопросы де-распределения в сторону, этот код не компилируется с этим сообщением:
Cannot take the address of, get the size of, or declare a pointer to a managed type ('T')
, которая, кажется странным, потому что вы должен иметь возможность выполнять вышеуказанные операции на основе ограничения where T : struct
на метод.
Если этот код ужасно некорректен, есть ли простой способ взять серию байтов и ввести их в тип 'T
'?
Спасибо!
спасибо для быстрого ответа это было именно то, что я искал! –
Может ли кто-нибудь из вас разработать (отправить код)? –