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