我最近遇到了一种情况,我需要创建一个通用方法来从字节数组中读取数据类型。
我创建了以下类:
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;
}
}
}
现在,抛开取消分配问题不谈,此代码不会与此消息一起编译:
无法获取托管类型 ('T') 的地址、大小或声明指向托管类型的指针
这似乎很奇怪,因为您应该能够根据对where T : struct
方法的约束来执行上述操作。
如果这段代码非常不正确,是否有任何简单的方法可以获取一系列字节并将它们转换为 ' T
' 类型?
谢谢!