将元素添加到列表 C# 的更好方法是什么
本文关键字:更好 方法 是什么 列表 元素 添加 | 更新日期: 2023-09-27 18:33:31
我有一个点列表,我用它来添加点。
我有两种方法,但我只想知道哪一种更好。
以下是第一种方法的代码:
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);
我必须添加四次要点,那么我应该遵循哪种方法,为什么,或者没关系,这只是风格的情况?
一定要选择第一个,尽可能。 AddRange
行动比每Add
都快得多。 (如果您考虑由于列表集合的增长而增加列表 rsize,就会变得很清楚)
使用第三种方法:
List<Point> borderPoints = new List<Point>(new Point[] {
new Point(0, 0),
new Point(Width, 0),
});
你是对的。 在你的情况下,这更多的是你的编程风格。
Add()
在循环中简单方便,而 一次使用时,AddRange()
看起来更优雅。
考虑性能:
AddRange()
将以前创建的树节点数组添加到集合中,同时Add()
向集合添加新的树节点(MSDN 文档)。
因此,如果您只添加 4 个节点或不经常添加节点,请使用 Add()
.
1) 如果您提前知道要添加到列表中多少点,请使用带有"capacity"参数的列表构造函数。
2)除非你多次使用它,否则实例化一个新数组只是为了将点传递给AddRange纯粹是浪费。
答案很简单,如果你有一个范围使用AddRange
并且如果你有一个项目使用Add
。
但在你的情况下,我根本不会使用列表。对我来说,你似乎缺少一个叫做边界点的概念。像这样:
public class BorderPoints {
public BorderPoints(Point p1, Point p2) {
_p1 = p1;
_p2 = p2;
}
}
Then you can just use that instead of the list.
我会使用第二种方法。
第一种方法不必要地实例化数组,因此速度会稍慢一些。
仅当要添加的项已在集合(或枚举)中时才使用 AddRange
。
通常,如果要压缩每一纳秒的性能,可以通过确保列表的容量足够大来容纳要添加的所有项目来实现:
var list = new List<T>(capacity);
... add items ...
或
list.Capacity = capacity;
... add items ...
但是,在将单个项目添加到列表中之前,将它们复制到数组中没有任何好处。