启动时List和数组之间的区别

时间:2016-04-21 10:03:53

标签: c# arrays list

当我这样做时:

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

我什么都没得到(null)
但是,当我这样做时:

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

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

2 个答案:

答案 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)

我建议你在做什么之前用空检查更新你的方法。

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

对于新人[0],你用0引用初始化它。但是如果使用10,则创建10个null引用。列表中没有任何内容。

我认为在你的Print方法中你正在对集合进行循环,而对于你没有任何循环的List,你可以使用数组循环10个空引用,这会导致异常。