You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:05:04