创建类数组时,其成员仍未实例化 [duplicate]

When creating a class array its members are still not instantiated [duplicate]

提问人:Klaus Ullrich 提问时间:10/26/2020 更新时间:10/26/2020 访问量:77

问:

对不起,这个愚蠢的问题!

为什么会出现 NullReferenceException: Object reference not set to an instance of an object?

public class myTestClass
{
    public string testString;
}

public class Test : MonoBehaviour
{
    public myTestClass[] testedClassObject;

    private void Start()
    {
        testedClassObject = new myTestClass[2];
        testedClassObject[0].testString = "test";  // --> Error
    }
}

我想我需要一个类中字符串的构造函数,但这应该是什么样子的?

C# unity-game-engine 初始化 NullReferenceException

评论

0赞 user3026017 10/26/2020
您只需要实例化数组,并且还需要实例化对象本身。testedClassObject = 新 myTestClass[2];testedClassObject[0] = 新 myTestClass();
0赞 Johnathan Barclay 10/26/2020
基本上还没有设置。testedClassObject[0]
0赞 Marc Gravell 10/26/2020
提示:公共字段很少是一个好主意,遵循 .NET 命名约定通常是一个好主意;因此,我期望 , 和 (甚至可能: .这些都不会影响答案,所以我只是把它作为附带评论。public class MyTestClasspublic string TestString {get;set;}public MyTestClass[] TestedClassObject {get;set;}public List<MyTestClass> TestedClassObject {get;} = new List<MyTestClass>();

答:

1赞 Marc Gravell 10/26/2020 #1

创建数组时,内容将擦除为零,对于引用,这意味着:所有引用都是(创建一个或多个引用不会同时为数组中的每个元素创建对象)。因此,您需要为内容显式创建对象。例如:null

testedClassObject = new myTestClass[2];
testedClassObject[0] = new myTestClass { testString = "test" };

或者更方便:

testedClassObject = new [] {
    new myTestClass { testString = "test" },
    // etc  
};

它同时执行数组和内容初始化(并为您推断长度)。