为什么用new关键字初始化列表,而不是简单地声明它们?

问题描述 投票:0回答:1

我对C#语言有基本的了解,知道如何做事却对为什么不太了解。今天我注意到,在初始化列表(例如new)时,我习惯性地添加了public List<Foo> foos = new List<Foo>();关键字,却没有意识到为什么要首先进行初始化。这只是激起了我的好奇心,我不得不来这里问(当然是在搜索之后)。

我尝试过简单地声明列表

public List<Foo> foos;

并且它与我的代码配合得很好,所以为什么要教我总是使用new关键字初始化列表?有什么区别?我认为这与分配内存有关,但是我还是对这些东西有基本的了解。

EDIT: @UnholySheep在评论中要求一个最小的,可复制的示例。在尝试格式化之后,我决定在此处添加它:

public class ListManager : MonoBehaviour
{
    public List<int> ints;

    public void AddInt(int i)
    {
        ints.Add(i);
    }

    void Start()
    {
        AddInt(3);
        AddInt(6);
        AddInt(9);

        foreach (int i in ints)
            Debug.Log($"Int {ints.IndexOf(i) + 1} is {i}");
    }
}

对我来说,这会产生结果:

Int 1 is 3
Int 2 is 6
Int 3 is 9

即使可以预期会发生NullReferenceException。这使用的是Unity的编译器,这可能就是public List<int> ints;public List<int> ints = new List<int>();相同工作的原因。也许仅仅是编译器在后台使事情变得正确了?对于不熟悉Unity的用户,Debug.Log类似于Console.WriteLinevoid Start()类似于void main()

c# list generics new-operator
1个回答
0
投票

编辑:现在,我看到您正在使用Unity。看看这个答案:https://gamedev.stackexchange.com/questions/129345/do-i-need-to-initialize-a-public-list-variable-in-unity

Unity的编辑器在生成游戏时自动创建新的List()部分

© www.soinside.com 2019 - 2024. All rights reserved.