将元素添加到列表C#的更好方法是什么?

时间:2012-05-09 06:47:08

标签: c#

我有一个积分列表,我用来添加积分。

我有两种方法,但我只是想知道哪种方法更好。

以下是第一种方法的代码:

 List<Point> borderPoints = new List<Point>();

                Point p1 = new Point(0, 0);
                Point p2 = new Point(Width, 0);

                borderPoints.AddRange(new[] { p1, p2 });

在第二种方法中我添加如下点:

 borderPoints.Add(p1);
 borderPoints.Add(p2);

我必须四次添加积分,所以我应该遵循哪种方法,为什么,或者无所谓,这只是风格的情况?

6 个答案:

答案 0 :(得分:2)

绝对选择第一个,你可以在哪里。 AddRange的行为比每个Add快得多。 (如果你考虑列表rsize由于列表集合的增长而变得明显)

答案 1 :(得分:2)

使用第三种方法:

List<Point> borderPoints = new List<Point>(new Point[] {
    new Point(0, 0),
    new Point(Width, 0),
});

答案 2 :(得分:1)

你是对的。  在您的情况下,更多的是您的编程风格。

Add()在循环中简单方便 AddRange()一次使用时看起来更优雅。

考虑表现:

AddRange()将一组先前创建的树节点添加到集合中,而Add()将新的树节点添加到集合中(MSDN文档)。

因此,如果您只是添加4个节点或不经常添加节点,请使用Add()

答案 3 :(得分:0)

1)如果您事先知道要添加到列表中的点数,请使用带有“capacity”参数的列表构造函数。

2)除非你多次使用它,实例化一个新数组只是为了将点传递给AddRange是纯粹的浪费。

答案 4 :(得分:0)

答案很简单,如果您使用范围AddRange并且如果您有一个项目使用Add

但在你的情况下,我根本不会使用列表。对我来说,似乎你错过了一个名为BorderPoints的概念。像这样:

public class BorderPoints {
    public BorderPoints(Point p1, Point p2) {
        _p1 = p1;
        _p2 = p2;
    }
}

Then you can just use that instead of the list.

答案 5 :(得分:0)

我会使用第二种方法。

第一种方法不必要地实例化一个数组,因此速度会稍慢。

如果要添加的项目已经在集合(或枚举)中,则仅使用AddRange

一般来说,如果你想要挤压每一个纳秒的性能,你可以通过确保列表的容量足够大,以便为你要添加的所有项目提供:

var list = new List<T>(capacity);
... add items ...

list.Capacity = capacity;
... add items ...

但是在将单个项目添加到列表中之前将其复制到数组中不会产生任何效果。