C#结构中如何定义数组

qq_36542187 2016-10-28 03:30:20
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
}
用的是这个程序,运行就会报错。
...全文
867 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36542187 2016-10-28
  • 打赏
  • 举报
回复
引用 9 楼 feiyun_Web 的回复:
[quote=引用 4 楼 qq_36542187 的回复:] [quote=引用 2 楼 feiyun_Web 的回复:] 2楼正解。 = new UInt16[CHANGDU]; 这个应该在构造函数里。
那我如果想要在结构中定义数组,该怎么实现呢?[/quote] 你是想做SOKCET结构体转换吧? 长度和类型那些,其实都是依赖特征做的,结构体只是定义,甚至不用什么uint16也是可以的,只要你的特征声明是对的。 对的,是做那个,可是用了那个上面所说的MASHUAL类之后我一开始的MARSHAL类就不能用了。 参考#8[/quot] 对的,可是我如果引用上面所说的MARSHAL类之前的那个MARSHAL类就不能用了
引用 9 楼 feiyun_Web 的回复:
[quote=引用 4 楼 qq_36542187 的回复:] [quote=引用 2 楼 feiyun_Web 的回复:] 2楼正解。 = new UInt16[CHANGDU]; 这个应该在构造函数里。
那我如果想要在结构中定义数组,该怎么实现呢?[/quote] 你是想做SOKCET结构体转换吧? 长度和类型那些,其实都是依赖特征做的,结构体只是定义,甚至不用什么uint16也是可以的,只要你的特征声明是对的。 参考#8[/quote] 是的,可是我用了上面所说的MARSHAL类之后,我事先用的MARSHAL类就不能用了,我那个是用来转换数据类型的。
我是飞云 2016-10-28
  • 打赏
  • 举报
回复
引用 4 楼 qq_36542187 的回复:
[quote=引用 2 楼 feiyun_Web 的回复:] 2楼正解。 = new UInt16[CHANGDU]; 这个应该在构造函数里。
那我如果想要在结构中定义数组,该怎么实现呢?[/quote] 你是想做SOKCET结构体转换吧? 长度和类型那些,其实都是依赖特征做的,结构体只是定义,甚至不用什么uint16也是可以的,只要你的特征声明是对的。 参考#8
xuzuning 2016-10-28
  • 打赏
  • 举报
回复
加个类似这样的声明
[MarshalAs(UnmanagedType.ByValArray, SizeConst = CHANGDU)]
public fixed UInt16[] arr;
qq_36542187 2016-10-28
  • 打赏
  • 举报
回复
引用 5 楼 D56233577 的回复:
[quote=引用 3 楼 qq_36542187 的回复:] 用这个可以吧 public fixed UInt16 arr[CHANGDU]; 可是之后我如果想要引用它的话,该怎么引用呢?结构体名.arr?可是会报错啊。
直接定义public UInt16[] arr;就行了 如果你不想用有参构造函数,也可以用对象初始化器。 var obj = new RETURN_OTDRip2() { arr = new UInt16[] { 1, 2, 3, 4, 5 } };[/quote] 如果我想定义这个数组的长度,用的就是里面的CHANGDU这个常量。
qq_36542187 2016-10-28
  • 打赏
  • 举报
回复
引用 5 楼 D56233577 的回复:
[quote=引用 3 楼 qq_36542187 的回复:] 用这个可以吧 public fixed UInt16 arr[CHANGDU]; 可是之后我如果想要引用它的话,该怎么引用呢?结构体名.arr?可是会报错啊。
直接定义public UInt16[] arr;就行了 如果你不想用有参构造函数,也可以用对象初始化器。 var obj = new RETURN_OTDRip2() { arr = new UInt16[] { 1, 2, 3, 4, 5 } };[/quote] 我如果想要定这个数组的长度呢?
D56233577 2016-10-28
  • 打赏
  • 举报
回复
引用 3 楼 qq_36542187 的回复:
用这个可以吧 public fixed UInt16 arr[CHANGDU]; 可是之后我如果想要引用它的话,该怎么引用呢?结构体名.arr?可是会报错啊。
直接定义public UInt16[] arr;就行了 如果你不想用有参构造函数,也可以用对象初始化器。 var obj = new RETURN_OTDRip2() { arr = new UInt16[] { 1, 2, 3, 4, 5 } };
qq_36542187 2016-10-28
  • 打赏
  • 举报
回复
引用 2 楼 feiyun_Web 的回复:
2楼正解。 = new UInt16[CHANGDU]; 这个应该在构造函数里。
那我如果想要在结构中定义数组,该怎么实现呢?
qq_36542187 2016-10-28
  • 打赏
  • 举报
回复
引用 1 楼 D56233577 的回复:
结构成员在申明时不允许初始化,放到构造函数里做。
用这个可以吧 public fixed UInt16 arr[CHANGDU]; 可是之后我如果想要引用它的话,该怎么引用呢?结构体名.arr?可是会报错啊。
我是飞云 2016-10-28
  • 打赏
  • 举报
回复
2楼正解。 = new UInt16[CHANGDU]; 这个应该在构造函数里。
D56233577 2016-10-28
  • 打赏
  • 举报
回复
结构成员在申明时不允许初始化,放到构造函数里做。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧