Не удается добавить один список к другому в C # ... пытаюсь использовать AddRange

StackOverflow https://stackoverflow.com/questions/1724606

Вопрос

Привет, я пытаюсь добавить 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.

Кто-нибудь может увидеть, что я делаю не так?Любая помощь приветствуется.

Спасибо,
Мэтт

Это было полезно?

Решение

Когда ты позвонишь 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() создает новую коллекцию.Поэтому ваши предметы добавляются в новую коллекцию, которая немедленно выбрасывается, а оригинал остается нетронутым.

resultCollection.ToList() вернет новый список.

Попробуй:

List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);

Попробуй

IList newList = resultCollection.ToList().Добавить диапазон (resultCollection2);

List<E> newList = resultCollection.ToList();
newList.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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top