我在内存中有一个二进制序列化对象,我想通过在 C# 中使用指针(不安全代码)从内存中读取它。请查看以下从内存流中读取的函数。
static Results ReadUsingPointers(byte[] data)
{
unsafe
{
fixed (byte* packet = &data[0])
{
return *(Results*)packet;
}
}
}
在此return *(Results*)packet;
语句中,我得到一个编译时异常“无法获取地址、获取大小或声明指向托管类型结果的指针”
这是我的结构
public struct Results
{
public int Id;
public int Score;
public char[] Product;
}
根据我的理解,我的结构的所有属性都是 blittable 属性,那么为什么我会收到这个错误,如果我需要在我的结构中使用 char[] 该怎么办?
EDIT-1 让我进一步解释(请注意,这些对象是模拟的)......
背景:我有一个Results
对象数组,我使用二进制序列化对它们进行了序列化。现在,在我程序的后期阶段,我需要尽快反序列化内存中的数据,因为数据量非常大。所以我在尝试,不安全的代码如何帮助我。
可以说,如果我的结构不包含public char[] Product;
,我会以相当好的速度取回我的数据。但是使用 char[] 它给了我错误(编译器应该这样做)。我正在寻找在这种情况下与 char[] 一起使用的解决方案。