C#如何在正在编组的结构中声明一个Dictionary来获取结构的大小?

时间:2016-04-08 06:33:46

标签: c# dictionary structure marshalling argumentexception

我有以下结构

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct CombinedDS
{
    public HeaderStruct Header;
    public StructA a;
    public StructB b;
    public StructC c;
    public StructD d;
    public Dictionary<string, KiteClass> KiteObjDict;
}

其中StructA StructB StructC StructD都是[StructLayout(LayoutKind.Sequential, Pack = 1)]的结构 KiteClass是正常的班级。

我收到 ArgumentException 输入&#39; MyApp.CombinedDS&#39;不能作为一种不受管理的结构进行整理;当我尝试使用

获取结构CombinedDS的大小时,无法计算有意义的大小或偏移量

int varsize = Marshal.SizeOf(typeof(CombinedDS));

我想知道这背后的理论原因以及正确的方法或任何实现我想要的建议。

1 个答案:

答案 0 :(得分:0)

词典是任意数量项目的集合。它的大小不为编译器所知,因为它会在添加/删除项目时在运行时更改。

如果您需要建议,可能需要在问题中添加信息,因为它没有真正指定您要实现的目标。