Не могу добавить один список в другой в C#... пытаясь использовать AddRange
Привет, я пытаюсь добавить 1 список в другой. Я сделал это с помощью AddRange()
раньше, но, похоже, здесь не работает... Вот код:
IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId);
resultCollection.ToList().AddRange(resultCollection2);
Я сделал отладку, чтобы проверить результаты, вот что я получил: resultCollection
имеет счет 4 resultCollection2
имеет счет 6, и после добавления диапазона, resultCollection
все еще имеет счет 4, когда он должен иметь счет 10.
Кто-нибудь может увидеть, что я делаю не так? Любая помощь приветствуется.
Спасибо,
Matt
5 ответов
Когда вы звоните ToList()
вы не оборачиваете коллекцию в List<T>
вы создаете новый List<T>
с такими же предметами в нем. То, что вы фактически делаете здесь, - это создание нового списка, добавление элементов к нему, а затем выбрасывание списка.
Вам нужно сделать что-то вроде:
List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);
В качестве альтернативы, если вы используете C# 3.0, просто используйте Concat
например,
resultCollection.Concat(resultCollection2); // and optionally .ToList()
Я предполагаю, что.ToList() создает новую коллекцию. Поэтому ваши предметы добавляются в новую коллекцию, которая немедленно выбрасывается, а оригинал остается нетронутым.
Пытаться
IList newList = resultCollection.ToList().AddRange(resultCollection2);
List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);
resultCollection.ToList()
вернет новый список.
Пытаться:
List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);
Вы можете использовать любое из следующего:
List<E> list = resultCollection as List<E>;
if (list == null)
list = new List<E>(resultCollection);
list.AddRange(resultCollection2);
Или же:
// Edit: this one could be done with LINQ, but there's no reason to limit
// yourself to .NET 3.5 when this is just as short.
List<E> list = new List<E>(resultCollection);
list.AddRange(resultCollection2);
Или же:
List<E> list = new List<E>(resultCollection.Concat(resultCollection2));