public struct RETURN_OTDRip2
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string STPKSTR;//起始帧
public UInt32 PKLEN;//总帧长
public UInt32 REV;//版本号
public UInt32 PKTPY;//帧类型
public UInt32 SRC;//源地址
public UInt32 DST;//目的地址
public UInt32 PKID;//流水号
public UInt32 RSVD1;//保留字节1
public UInt32 CMDCODE;//命令码相应代码
public UInt32 DATLEN;//数据长度
public UInt32 datanum;
public UInt16[] arr = new UInt16[CHANGDU];
public UInt32 RSVD2;//保留字节2
}
用的是这个程序,运行就会报错。
10 个解决方案
#1
结构成员在申明时不允许初始化,放到构造函数里做。
#2
2楼正解。
= new UInt16[CHANGDU];
这个应该在构造函数里。
#3
用这个可以吧
public fixed UInt16 arr[CHANGDU];
可是之后我如果想要引用它的话,该怎么引用呢?结构体名.arr?可是会报错啊。
#4
那我如果想要在结构中定义数组,该怎么实现呢?
#5
直接定义public UInt16[] arr;就行了
如果你不想用有参构造函数,也可以用对象初始化器。
var obj = new RETURN_OTDRip2() { arr = new UInt16[] { 1, 2, 3, 4, 5 } };
#6
我如果想要定这个数组的长度呢?
#7
用这个可以吧
public fixed UInt16 arr[CHANGDU];
可是之后我如果想要引用它的话,该怎么引用呢?结构体名.arr?可是会报错啊。
直接定义public UInt16[] arr;就行了
如果你不想用有参构造函数,也可以用对象初始化器。
var obj = new RETURN_OTDRip2() { arr = new UInt16[] { 1, 2, 3, 4, 5 } };
如果我想定义这个数组的长度,用的就是里面的CHANGDU这个常量。
#8
加个类似这样的声明
[MarshalAs(UnmanagedType.ByValArray, SizeConst = CHANGDU)]
public fixed UInt16[] arr;