Unity中C#类数组赋值报错:Object reference not set to an instance of an object
问题原因
你创建的只是数组容器,数组里的每个StringClass元素默认都是null——因为StringClass是引用类型,数组仅分配了存储引用的空间,但没有为每个元素创建实际的StringClass对象实例。直接访问null对象的name属性自然会触发Object reference not set to an instance of an object错误。
另外你的数组长度设为3,索引范围是0-2,最后一行赋值stringClass[3].name还会触发数组越界错误,这也是需要修正的点。
解决方案
方法1:逐个实例化数组元素
先为每个数组位置创建StringClass实例,再赋值属性:
public class StringClass { public string name; } private void JsonParsing() { StringClass[] stringClass = new StringClass[3]; // 先实例化每个元素 stringClass[0] = new StringClass(); stringClass[0].name = "test0"; stringClass[1] = new StringClass(); stringClass[1].name = "test1"; stringClass[2] = new StringClass(); stringClass[2].name = "test2"; }
方法2:使用数组初始化器(更简洁)
一步完成数组创建和元素实例化:
private void JsonParsing() { StringClass[] stringClass = new StringClass[] { new StringClass { name = "test0" }, new StringClass { name = "test1" }, new StringClass { name = "test2" } }; }
为什么字符串数组可以正常工作?
字符串虽然也是引用类型,但你直接赋值字符串字面量(比如stringArr[0] = "test")时,CLR会自动创建对应的字符串对象并将引用赋值给数组元素,不需要手动显式new。而自定义引用类型必须你手动创建每个实例,数组不会自动帮你完成这一步。
内容的提问来源于stack exchange,提问作者Bagbaq
相关产品推荐
相关产品推荐

