当我这样做时:
List<Person> person = new List<Person>();
person.Print();
我什么都没得到(null)
但是,当我这样做时:
Person[] person2 = new person[10];
person2.Print();
我得到例外。
为什么?记忆中会发生什么?我不明白。
答案 0 :(得分:2)
确定,
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
实施是否适用于此?
答案 1 :(得分:1)
对于新人[0],你用0引用初始化它。但是如果使用10,则创建10个null引用。列表中没有任何内容。
我认为在你的Print方法中你正在对集合进行循环,而对于你没有任何循环的List,你可以使用数组循环10个空引用,这会导致异常。