启动时列表和数组之间的区别

本文关键字:之间 区别 数组 列表 启动 | 更新日期: 2024-10-25 17:31:52

当我这样做时:

List<Person> person = new List<Person>();
person.Print();

我什么也得不到(空)
但是,当我这样做时:

Person[] person2 = new person[10];
person2.Print();

我得到一个例外。
为什么?记忆中发生了什么?我不明白。

启动时列表和数组之间的区别

好的,

var people = new Person[10]

大致相当于

var people = new List<Person>
   {
       default(Person),
       default(Person),
       default(Person),
       default(Person),
       default(Person),
       default(Person),
       default(Person),
       default(Person),
       default(Person),
       default(Person)
   }

现在,我怀疑您对Print的实现,它大概扩展了IList<Person>无法处理default(Person)


var people = new List<Person>();

其实更等同于

var people = new Person[0];

您的Print实施是否适用于此?

我建议您在什么都不做之前使用空检查更新您的方法。

正如@Jodrell在他的回答中所说,你正在以不同的方式使用它们。

使用

new person[0],您将使用 0 个引用对其进行初始化。但是,如果使用 10,则会创建 10 个对 null 的引用。该清单不包含任何内容。

我认为在您的 Print 方法中,您正在对集合进行循环,并且使用 List,您没有要循环的内容,但是使用数组,您可以循环 10 个空引用,这会导致您异常。