在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 };
答案 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 };