我的问题是:对于大量数据,最有效和最正确的是什么?
_pointBuffer1 = new Point3DCollection {
new Point3D(140.961, 142.064, 109.300), new Point3D(142.728, 255.678, (...)
- 或 -
_pointBuffer1.Add(new Point3D(140.961, 142.064, 109.300)); _poitBuffer1.Add(142.728, (...)
或者它是一样的吗?
Point3D被声明为Point3DCollection,但我的问题是任何对象集合(例如可能是Int32)..
答案 0 :(得分:7)
为了清楚起见,我强烈建议使用集合初始化程序(虽然我也会使用一些新行)。
他们不会相当最终成为同一个IL,请注意。第一个结果相当于:
var tmp = new Point3DCollection();
tmp.Add(new Point3D(140.961, 142.064, 109.300));
tmp.Add(new Point3D(142.728, 255.678));
...
_pointBuffer1 = tmp;
换句话说,只有在所有Add
次调用之后才能对最终变量进行分配。
如果您的Point3D
构造函数以某种方式引用_pointBuffer1
,这很重要!
答案 1 :(得分:4)
两者都编译为相同的IL。集合初始化器只是语法糖。他们将调用Add
方法。例如:
var res = new List<int>() { 1, 2, 3 };
编译为:
List<int> <>g__initLocal0 = new List<int>();
<>g__initLocal0.Add(1);
<>g__initLocal0.Add(2);
<>g__initLocal0.Add(3);
List<int> res = <>g__initLocal0;
唯一的区别是声明了一个额外的局部变量。
答案 2 :(得分:1)
集合初始化是语法糖。通过这个我的意思是它是一个方便的速记,由编译器理解。编译器将生成与在每个元素上调用集合的add方法逻辑相同的代码。