组合两个List(Of String)的最有效方法是什么?

时间:2010-03-16 19:52:28

标签: asp.net vb.net generics .net-2.0 performance

让我说我得到了:

Dim los1 as New List(Of String)
los1.Add("Some value")

Dim los2 as New List(Of String)
los2.Add("More values")

将两者合并为一个List(Of String)的最有效方法是什么?

编辑:虽然我喜欢每个人提供的解决方案,但我可能也应该提到我使用的是.NET 2.0框架。

4 个答案:

答案 0 :(得分:34)

我认为

los1.AddRange(los2)

答案 1 :(得分:16)

如果您只想查看两个列表的序列,请使用Enumerable.Concat方法。

Dim combined = los1.Concat(los2)

这将返回IEnemurable(Of String),其中包含los1los2中的所有元素。它不会分配一个巨大的新集合,而是迭代2个独立的集合。

答案 2 :(得分:7)

JaredPar的答案将为您提供一个将枚举两个列表的对象。如果您确实想要一个包含这些值的List(Of String)对象,那就简单如下:

Dim combined As New List(Of String)(los1.Concat(los2));

编辑:您知道,仅仅因为您使用的是.NET 2.0并不意味着您无法推出自己认为有用的某些LINQ扩展方法的版本。特别是Concat方法在C#*中实现起来非常简单:

public static class EnumerableUtils {
    public static IEnumerable<T> Concat<T>(IEnumerable<T> first, IEnumerable<T> second) {
        foreach (T item in first)
            yield return item;

        foreach (T item in second)
            yield return item;
    }
}

然后,请看这里:

Dim los1 as New List(Of String)
los1.Add("Some value")

Dim los2 as New List(Of String)
los2.Add("More values")

Dim combined As New List(Of String)(EnumerableUtils.Concat(los2, los2))

* 公平地说,由于yield关键字,这在C#中要简单得多。 可以在VB.NET中完成,但是以与LINQ扩展相同的方式提供延迟执行会更加棘手。

答案 3 :(得分:1)

Union()可能,如果你想要一个明确的条目列表(我相信它只是一个独特的),是另一种选择。