У меня есть два экземпляра IEnumerable<T>
(с тем же T
). Я хочу новый экземпляр IEnumerable<T>
который является конкатенацией обоих.
Есть ли встроенный метод в.Net, чтобы сделать это, или мне нужно написать его сам?
У меня есть два экземпляра IEnumerable<T>
(с тем же T
). Я хочу новый экземпляр IEnumerable<T>
который является конкатенацией обоих.
Есть ли встроенный метод в.Net, чтобы сделать это, или мне нужно написать его сам?
Да, LINQ to Objects поддерживает это с помощью Enumerable.Concat
:
var together = first.Concat(second);
Метод Concat
вернет объект, который реализует IEnumerable<T>
, возвращая объект (назовем его Cat), чей перечислитель будет пытаться использовать два переданных элемента перечислимого типа (называть их A и B) последовательно. Если перечислимые числа представляют последовательности, которые не будут меняться в течение жизни Cat, и которые могут быть прочитаны без побочных эффектов, тогда Cat может использоваться напрямую. В противном случае может быть хорошей идеей вызвать ToList()
в Cat
и использовать полученный List<T>
(который будет представлять снимок содержимого A и B).
Некоторые перечислители принимают моментальный снимок при начале перечисления и возвращают данные из этого моментального снимка, если коллекция будет изменена во время перечисления. Если B такой перечислимый, то любое изменение в B, которое происходит до того, как Cat достигло конца A, появится в перечислении Cat, но изменения, которые происходят после этого, не будут. Такая семантика может сбивать с толку; получение снимка 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);
}