是否在集合类型上使用大括号初始化程序设置初始容量?在集合类型上使用大括号初始值设定项是否设置了它的容量,还是您仍然需要指定它?即:varlist=newList(){"One","Two"};结果与此相同:varlist=newList(2){"One","Two"};项调用添加。varlist=newList{“一”,“二”,“三”};如您所见,在这种情况下调用无参数构造函数:L_0000:nopL_0001:newobjinstancevoid[mscorlib]System.Collections.Generic.List`1::.ctor()L_0006:stloc.1L_0007:ldloc.1L_0008:ldstr"One"L_000d:callvirtinstancevoid[mscorlib]System.Collections.Generic.List`1::Add(!0)L_0012:nopL_0013:ldloc.1L_0014:ldstr"Two"L_0019:callvirtinstancevoid[mscorlib]System.Collections.Generic.List`1::Add(!0)L_001e:nopL_001f:ldloc.1L_0020:ldstr"Three"L_0025:callvirtinstancevoid[mscorlib]System.Collections.Generic.List`1::Add(!0)L_002a:nopL_002b:ldloc.1所以,你应该手动设置容量:varlist=new清单(5){“一”、“二”、“三”};编译成:L_0000:nopL_0001:ldc.i4.5L_0002:newobjinstancevoid[mscorlib]System.Collections.Generic.List`1::.ctor(int32)//restissame因此算法非常明显-它调用您指定的构造函数(默认情况下没有参数),然后为每个项目调用Add。注意:我知道,List默认容量是4,我验证了如果我们在初始化程序中传递超过4个项目会发生什么(例如,编译器可能会根据项目计数确定调用哪个构造函数)但结果是相同的-无默认调用参数构造函数。我认为集合初始化器的目的是创建小集合(1-8项),因此性能会受到一点影响(如果将8项传递给初始化器,则只调整一次大小)。没有人预料到您会使用100个项目进行就地初始化。如果你打算这样做,你应该使用适当的集合构造函数。集合初始值设定项使用可用的Add方法将项目添加到集合中。因此,行为与使用空构造函数调用Add方法相同。实际上,编译器将对象初始值设定项语法更改为对Add方法的调用。因此,是否使用对象初始值设定项并不重要。重要的是您是否决定使用构造函数重载以及实际添加了多少项。根据文档并考虑到对象初始值设定项的计数为2,它最终也会设置容量。容量总是大于或等于Count在用无参数构造函数初始化List后,内部数组被设置为长度为0的数组。当调用Add()、Insert()或InsertRange()时,容量重新计算列表:如果指定了容量,则会创建一个具有该大小的内部数组。参考:DotNet来源:RefSrcSource.NET4.54.5.50709.0netndpclrsrcBCLSystemCollectionsGenericList.cs597531List.cs以上是C#学习教程:Doesusingabraceinitializeronacollectiontypesetaninitialcapacity?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
