以有效的方式替换多个InsertRange()

时间:2015-09-04 15:39:52

标签: c#

将项目插入集合

MyList.Clear();
MyList.InsertRange(MyList.Count, Collection1);
MyList.InsertRange(MyList.Count, Collection2);
MyList.InsertRange(MyList.Count, Collection3);

在上面的代码中,我将3次插入同一个列表,以便按照顺序进行操作。这可以有效地替换吗?

4 个答案:

答案 0 :(得分:3)

不确定这是否更有效:

MyList.AddRange(Collection1.Concat(Collection2).Concat(Collection3));

如果集合很大,如果你在前面添加这一行,它可能会更有效:

MyList = new List<string>(Collection1.Count + Collection2.Count + Collection3.Count);

(假设它是List<string>

答案 1 :(得分:0)

更高效?我不这么认为。您有三个不同的列表需要添加。添加它们时,每个都将被迭代。您可以使语法更紧凑,但在幕后,它们仍将在三个集合中进行迭代。

答案 2 :(得分:0)

正如Tim所说,这两种方法看起来效率更高,但如果要添加许多不同的集合,我更倾向于使用InsertRange的原始方法来提高代码的可读性。

对于InsertRange和AddRange,请确保所有集合都不为null,否则您将获得异常。

答案 3 :(得分:0)

如果您Collection1,2,3的任何人正在实施ICollection<T>(例如List<T>T[]),那么您的方法是最佳的。如果它们都只是IEnumerable<T>那么它并不重要 - 你的或单个AddRange与连接集合。