allegro 发表于 2022-6-17 16:46:00

C#结构体作为函数参数的问题


新鸟,如下结构体,作为函数参数:public byte msg_parse(Msg_s obj, byte data),编译时没有报错,运行时给obj.data赋值就报错:“System.NullReferenceException:“未将对象引用设置到对象的实例。””,debug发现obj.data是null。我试过这样定义,static Msg_s obj = new Msg_s();obj.data还是null,求大佬指点迷津,谢谢。

      
      public struct Msg_s
      {
            public byte sop1;
            public byte sop2;
            public byte msg_type;
            public byte msg_id;
            public ushort length;
            
            public byte[] data;
            public ushort crc;
            public byte eop1;
            public byte eop2;
      };


ibcadmin 发表于 2022-6-17 17:45:59

因为你的data是byte[]数组,所以需要new一下,obj.data = new byte[]{};

allegro 发表于 2022-6-17 18:05:17

感谢大佬指导,这样可以了,我有个疑问,static Msg_s obj = new Msg_s();这样new整个结构体,结构体里面的数组怎么还要重新new呢?

ibcadmin 发表于 2022-6-19 22:39:07

allegro 发表于 2022-6-17 18:05
感谢大佬指导,这样可以了,我有个疑问,static Msg_s obj = new Msg_s();这样new整个结构体,结构体里面的 ...

因为你里面的属性也是一个对象

allegro 发表于 2022-6-21 10:57:45

感谢,我把嵌入式里面的C语言移到C#里面,原来没有问题的现在好多问题,看来差别挺大的。

ibcadmin 发表于 2022-6-21 15:42:42

allegro 发表于 2022-6-21 10:57
感谢,我把嵌入式里面的C语言移到C#里面,原来没有问题的现在好多问题,看来差别挺大的。

是的,面向对象嘛,只要是对象 都要new
页: [1]
查看完整版本: C#结构体作为函数参数的问题