Как объединить два IEnumerable в новый IEnumerable?
у меня есть два экземпляра IEnumerable<T>
(с тем же T
). Я хочу новый экземпляр IEnumerable<T>
, который является конкатенацией обоих.
есть ли встроенный метод в .Net, чтобы сделать это, или я должен написать его сам?
4 ответа:
да, LINQ to Objects поддерживает это с помощью
Enumerable.Concat
:var together = first.Concat(second);
The
Concat
метод вернет объект, который реализуетIEnumerable<T>
возвращая объект (назовите его Cat), перечислитель которого попытается использовать два переданных перечислимых элемента (назовите их A и B) последовательно. Если переданные перечислимые элементы представляют собой последовательности, которые не изменятся в течение жизни Cat и которые могут быть прочитаны без побочных эффектов, то Cat может использоваться непосредственно. В противном случае, это может быть хорошей идеей, чтобы позвонитьToList()
onCat
и использовать полученныйList<T>
(который будет представлять собой снимок содержимого A и B).некоторые перечислители делают снимок при начале перечисления и возвращают данные из этого снимка, если коллекция изменяется во время перечисления. Если B является таким перечислимым, то любое изменение в B, которое происходит до того, как Cat достигнет конца A, будет отображаться в перечислении Cat, но изменения, которые происходят после этого, не будут. Такая семантика, вероятно, может быть запутанной; принимая снимок кошки можно избежать такого проблемы.
вы можете использовать ниже код для решения:-
public void Linq94() { int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; int[] numbersB = { 1, 3, 5, 7, 8 }; var allNumbers = numbersA.Concat(numbersB); Console.WriteLine("All numbers from both arrays:"); foreach (var n in allNumbers) { Console.WriteLine(n); } }
//The answare i was looking for when searching public void Answer() { IEnumerable<YourClass> first = this.GetFirstIEnumerableList(); //Assign to empty list so we can use later IEnumerable<YourClass> second = new List<YourClass>(); if (IwantToUseSecondList) { second = this.GetSecondIEnumerableList(); } IEnumerable<SchemapassgruppData> concatedList = first.Concat(second); }