.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
不能代替Array
。他们解决截然不同的问题。如果您想要固定大小,则需要一个Array
。如果使用List
,则表示做错了。