让我说我得到了:
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框架。
答案 0 :(得分:34)
我认为
los1.AddRange(los2)
答案 1 :(得分:16)
如果您只想查看两个列表的序列,请使用Enumerable.Concat
方法。
Dim combined = los1.Concat(los2)
这将返回IEnemurable(Of String)
,其中包含los1
和los2
中的所有元素。它不会分配一个巨大的新集合,而是迭代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()可能,如果你想要一个明确的条目列表(我相信它只是一个独特的),是另一种选择。