struct中的struct数组

时间:2012-04-28 06:30:18

标签: c# .net

是否可以在另一个struct中声明struct数组字段?

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct A
{
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct B
{
    public fixed A FieldA[123];
}

Visual Studio告诉FieldA只能是任何简单类型的数组而不是struct。这里有解决方案/解决方法吗?

2 个答案:

答案 0 :(得分:3)

  

是否可以在另一个结构中声明struct array字段?

是的,但是如果你想让它成为固定大小的缓冲区有一些限制。来自C#4规范的第18.7.1节:

  

固定大小缓冲区声明的缓冲区元素类型指定声明引入的缓冲区的元素类型。缓冲区元素类型必须是预定义类型之一sbytebyteshortushortintuint,{{1 }},longulongcharfloatdouble

我不知道有任何替代方法来模拟任意结构的固定大小的缓冲区。

答案 1 :(得分:0)

尝试以这种方式定义第二个结构:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct B
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=123)]
    public fixed A[] FieldA;
}