C# 中的结构体如何样定义一个定长的数组成员

C# 中的结构体怎么样定义一个定长的数组成员?
本帖最后由 su_787910081 于 2014-04-04 11:38:43 编辑
C# 中的结构体怎么样定义一个定长的数组成员?

比如C中的结构体为:

struct stru_test
{
        int arrNumber[10];
}


在C#中应该怎么定义?

因为我在C#中使用构造函数,但是不允许有无参数的构造函数。
所以不知道怎么办了。


另外,C#中怎么使用#ifndef #define #endif 宏定义,是否可以使用?


------解决方案--------------------



引用:
Quote: 引用:


结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。


不明白什么是自定义结构的布局,不过这个不重要,如果方便的话,一两句话讲讲。

另外,我在结构体中定义一个结构体数组是编译不过的:

struct GLOBAL_WAYPOINT
{
        int  a;
        int  b;
        int  c;
        short  d;
        short e;
        short f;
        short g;
};

struct  stru_use
{
        // 编译时提示固定大小的缓冲区类型必须为基础数据类型
        public unsafe fixed GLOBAL_WAYPOINT globalWaypoint[100]; 
};




我的错,确实不行,看来我想多了

在 C# 中,可以使用 fixed 语句在数据结构中创建带有固定大小数组的缓冲区。  使用现有代码(如使用其他语言、预先存在的 DLL 或 COM 项目编写的代码)时,这种方法非常有用。 固定数组可采用允许普通结构成员使用的任何特性或修饰符。 唯一的限制是,数组类型必须是 bool、byte、 char、 short、int、long、sbyte、ushort、uint、ulong、float 或 double。 
------解决方案--------------------
如果是在字节流中读取结构体可以这么定义

        struct stru_use
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
            public  GLOBAL_WAYPOINT[] globalWaypoint;
        };