Jas*_*wne 26 vb.net asp.net generics performance .net-2.0
假设我有:
Dim los1 as New List(Of String)
los1.Add("Some value")
Dim los2 as New List(Of String)
los2.Add("More values")
Run Code Online (Sandbox Code Playgroud)
将两者合二为一的最有效方法是List(Of String)什么?
编辑:虽然我喜欢每个人提供的解决方案,但我可能也应该提到我使用.NET 2.0框架.
Jav*_*ier 35
我认为
los1.AddRange(los2)
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 17
如果您只想查看两个列表的序列,请使用该Enumerable.Concat方法.
Dim combined = los1.Concat(los2)
Run Code Online (Sandbox Code Playgroud)
这将返回一个IEnemurable(Of String)包含所有元素的los1和los2.它不会分配一个巨大的新集合,而是迭代2个独立的集合.
JaredPar的答案将为您提供一个将枚举两个列表的对象.如果你真的想要一个包含这些值的List(Of String)对象,它就像这样简单:
Dim combined As New List(Of String)(los1.Concat(los2));
Run Code Online (Sandbox Code Playgroud)
编辑:你知道,仅仅因为你使用的是.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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,看到这里:
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))
Run Code Online (Sandbox Code Playgroud)
*公平地说,由于yield关键字,这在C#中要简单得多.它可以在VB.NET中完成,但是以与LINQ扩展相同的方式提供延迟执行会更加棘手.