将元素添加到列表 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);

必须添加四次要点,那么我应该遵循哪种方法,为什么,或者没关系,这只是风格的情况?

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

一定要选择第一个,尽可能。 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 ...

但是,在将单个项目添加到列表中之前,将它们复制到数组中没有任何好处。