声明一个不安全的固定自定义结构数组的解决方法?

ded*_*cos 5 c# struct pointers fixed-size-types

是否有任何错误CS1663的解决方法("固定大小缓冲区类型必须是以下之一:bool,byte,short,int,long,char,sbyte,ushort,uint,ulong,float或double.")?

我需要从另一个blittable自定义类型结构声明一个不安全的固定数组,但我陷入了这个编译错误.

显示一些代码来阐明下面的问题.

struct s1
{
    byte _b1;
    byte _b2;
}

unsafe struct s2
{
    fixed s1 _s1[5]; // CS1663 here...
}
Run Code Online (Sandbox Code Playgroud)

请注意,这两个结构是blittable,所以错误对我没有任何意义.

任何人都知道我能做什么?

谢谢.

Vad*_*nov 1

这是固定大小缓冲区的限制。

固定数组可以采用常规结构成员允许的任何属性或修饰符。唯一的限制是数组类型必须是boolbytecharShortintlongsbyteushortuintulongfloatdouble

您只能使用该类型,但不能使用组合(例如struct仅包含该类型)。无论您的类型是否为 bittable,都没有区别。你就是不能使用它。

那么您就不能将您的自定义用于struct固定大小的缓冲区。

解决方法?嗯,是的,可能是。您可以更改代码结构并使用如下内容:

unsafe struct s2
{
    fixed byte _b1[5]; 
    fixed byte _b2[5]; 
}
Run Code Online (Sandbox Code Playgroud)