Если бы у меня был:
List<string> myList1;
List<string> myList2;
myList1 = getMeAList();
// Checked myList1, it contains 4 strings
myList2 = getMeAnotherList();
// Checked myList2, it contains 6 strings
myList1.Concat(myList2);
// Checked mylist1, it contains 4 strings... why?
Я запускал код, подобный этому, в Visual Studio 2008 и устанавливал точки останова после каждого выполнения. После myList1 = getMeAList();
, myList1
содержит четыре строки, и я нажал кнопку «плюс», чтобы убедиться, что они не все нулевые.
После myList2 = getMeAnotherList();
, myList2
содержит шесть строк, и я проверил , чтобы убедиться , что они не были пустыми ... После myList1.Concat(myList2);
myList1 содержал только четыре строки. Это почему?
источник
IEnumerable<T>
Работает нормально, я так думаю. Как уже было сказано, Concat возвращает новую последовательность и, преобразуя результат в List, отлично справляется со своей задачей.
источник
Стоит также отметить, что Concat работает в постоянном времени и в постоянной памяти. Например, следующий код
дает следующие метрики времени / памяти:
источник
Я знаю, что это старо, но я наткнулся на этот пост, быстро подумав, что Конкат будет моим ответом. Союз отлично сработал для меня. Обратите внимание, он возвращает только уникальные значения, но, зная, что я все равно получал уникальные значения, это решение сработало для меня.
Выход:
источник
Посмотрите на мою реализацию. Это безопасно от нулевых списков.
источник