.NET 提供了一个性能几乎相同的通用列表容器(参见数组与列表的性能问题)。然而,它们在初始化方面有很大的不同。
数组很容易用默认值进行初始化,根据定义,它们已经具有一定的大小:
string[] Ar = new string[10];
它允许一个人安全地分配随机的项目,比如:
Ar[5]="hello";
有了清单,事情就更棘手了。我可以看到进行相同初始化的两种方法,这两种方法都称不上优雅:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
或者
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
什么是更干净的方法?
编辑: 到目前为止,答案涉及到容量,这是一些别的东西,而不是预填充列表。例如,在刚刚创建的容量为10的列表中,不能执行 L[2]="somevalue"
编辑2: 人们想知道我为什么要这样使用列表,因为这不是它们想要被使用的方式。我认为有两个原因:
有人可能会非常有说服力地认为,列表是“下一代”数组,它增加了灵活性,而且几乎不会带来任何损失。因此,默认情况下应该使用它们。我指出它们可能不那么容易初始化。
我目前正在编写的是一个基类,它提供默认功能,作为更大框架的一部分。在我提供的默认功能中,List 的大小在高级中已知,因此我可以使用数组。但是,我想为任何基类提供动态扩展它的机会,因此我选择了一个列表。