使用集合初始值设定项时是否推断了初始容量?

时间:2010-01-27 15:18:17

标签: c#

在C#3.0中使用集合初始值设定项时,是否从用于初始化集合的元素数量推断出集合的初始容量?例如,是

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

相当于

List<int> digits = new List<int>(10) { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

2 个答案:

答案 0 :(得分:4)

不,它相当于:

// Note the () after <int> - we're calling the parameterless constructor
List<int> digits = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

换句话说,C#编译器不知道或不关心无参数构造函数将做什么 - 但这就是它将调用的内容。由集合本身来决定它的初始容量是什么(如果它甚至有这样一个概念 - 例如链接列表没有。)

答案 1 :(得分:4)

没有

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

相当于

List<int> temp = new List<int>();
temp.Add(0);
temp.Add(1);    
temp.Add(2);    
temp.Add(3);    
temp.Add(4);    
temp.Add(5);    
temp.Add(6);    
temp.Add(7);    
temp.Add(8);    
temp.Add(9);    
List<int> digits = temp;

添加的项目数不会自动更改初始容量。如果您通过集合初始值设定项添加了16个以上的项目,则可以将构造函数和初始化程序组合在一起,如下所示:

List<int> digits = new List<int>(32) { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };