2

是否可以在另一个中声明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. 这里有什么解决方案/解决方法吗?

4

2 回答 2

3

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

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

固定大小缓冲区声明的缓冲区元素类型指定声明引入的缓冲区的元素类型。缓冲区元素类型必须是预定义类型之一sbyte, byte, short, ushort, int, uint, long, ulong, char, float,doublebool

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

于 2012-04-28T06:36:38.453 回答
0

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

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct B
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=123)]
    public fixed A[] FieldA;
}
于 2012-04-28T06:41:22.997 回答