2012-04-28 94 views
2
中的结构数组

是否有可能在另一个struct中声明struct数组字段?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的阵列。有没有解决方案/解决方法?

回答

3

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

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

固定大小的缓冲区声明的缓冲区元素类型指定由声明引入的缓冲区的元素类型。缓冲元件类型必须是预定义类型sbyte之一,byteshortushortintuintlongulongcharfloatdouble,或bool

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

0

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

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