0

我有一个用于添加点的点列表。

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

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

 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);

我必须四次加分,那么我应该遵循哪种方法以及为什么,或者没关系,这只是 style 的情况?

4

6 回答 6

2

绝对选择第一个,你可以。AddRange比每一个都快得多Add。(如果您考虑 list rsize 由于列表集合的增长,那就清楚了)

于 2012-05-09T06:50:52.097 回答
2

使用第三种方法:

List<Point> borderPoints = new List<Point>(new Point[] {
    new Point(0, 0),
    new Point(Width, 0),
});
于 2012-05-09T06:51:11.487 回答
1

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

Add()循环简单方便 AddRange(),一次性使用更显优雅。

考虑性能:

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

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

于 2012-05-09T06:51:54.960 回答
0

我会使用第二种方法。

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

AddRange在要添加的项目已经在集合(或枚举)中时使用。

一般来说,如果你想压缩每纳秒的性能,你可以通过确保列表的容量足够大来容纳你要添加的所有项目来做到这一点:

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

或者

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

但是在将单个项目添加到列表之前将它们复制到一个数组中不会给您带来任何好处。

于 2012-05-09T06:55:59.317 回答
0

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

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

于 2012-05-09T06:52:01.563 回答
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.
于 2012-05-09T06:53:17.400 回答