Ответ 1
Я думаю,
los1.AddRange(los2)
Скажем, у меня есть:
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.
Я думаю,
los1.AddRange(los2)
Если вы просто хотите увидеть последовательность из двух списков, используйте метод Enumerable.Concat
.
Dim combined = los1.Concat(los2)
Это вернет IEnemurable(Of String)
, который содержит все элементы в los1
и los2
. Он не будет выделять огромную новую коллекцию, но вместо этого будет выполнять итерацию по двум отдельным коллекциям.
Ответ JaredPar даст вам объект, который будет перечислять оба списка. Если вы действительно хотите, чтобы объект List(Of String)
содержал эти значения, он прост как:
Dim combined As New List(Of String)(los1.Concat(los2));
РЕДАКТИРОВАТЬ: вы знаете, только потому, что вы используете .NET 2.0, это не значит, что вы не можете катить свои версии некоторых методов расширения LINQ, которые вы лично найдете полезными. Метод Concat
, в частности, был бы довольно тривиальным для реализации в С# *:
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
. Это можно сделать в VB.NET, но было бы сложнее предоставить отложенное выполнение таким же образом, что и расширения LINQ.
Union() потенциально, если вам нужен отдельный список записей (я верю, что он имеет только отдельный), это еще одна альтернатива.