启动时列表和数组之间的区别
本文关键字:之间 区别 数组 列表 启动 | 更新日期: 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 个空引用,这会导致您异常。