是否可以在另一个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
。这里有解决方案/解决方法吗?
答案 0 :(得分:3)
是否可以在另一个结构中声明struct array字段?
是的,但是如果你想让它成为固定大小的缓冲区有一些限制。来自C#4规范的第18.7.1节:
固定大小缓冲区声明的缓冲区元素类型指定声明引入的缓冲区的元素类型。缓冲区元素类型必须是预定义类型之一
sbyte
,byte
,short
,ushort
,int
,uint
,{{1 }},long
,ulong
,char
,float
或double
。
我不知道有任何替代方法来模拟任意结构的固定大小的缓冲区。
答案 1 :(得分:0)
尝试以这种方式定义第二个结构:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct B
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=123)]
public fixed A[] FieldA;
}