Как объединить два IEnumerable <t> в новый IEnumerable <t> ?

У меня есть два экземпляра IEnumerable<T> (с тем же T). Я хочу новый экземпляр IEnumerable<T> который является конкатенацией обоих.

Есть ли встроенный метод в.Net, чтобы сделать это, или мне нужно написать его сам?

Ответ 1

Да, LINQ to Objects поддерживает это с помощью Enumerable.Concat:

var together = first.Concat(second);

Ответ 2

Метод Concat вернет объект, который реализует IEnumerable<T>, возвращая объект (назовем его Cat), чей перечислитель будет пытаться использовать два переданных элемента перечислимого типа (называть их A и B) последовательно. Если перечислимые числа представляют последовательности, которые не будут меняться в течение жизни Cat, и которые могут быть прочитаны без побочных эффектов, тогда Cat может использоваться напрямую. В противном случае может быть хорошей идеей вызвать ToList() в Cat и использовать полученный List<T> (который будет представлять снимок содержимого A и B).

Некоторые перечислители принимают моментальный снимок при начале перечисления и возвращают данные из этого моментального снимка, если коллекция будет изменена во время перечисления. Если B такой перечислимый, то любое изменение в B, которое происходит до того, как Cat достигло конца A, появится в перечислении Cat, но изменения, которые происходят после этого, не будут. Такая семантика может сбивать с толку; получение снимка Cat может избежать таких проблем.

Ответ 3

Вы можете использовать нижеприведенный код для своего решения: -

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); 
    } 
}

Ответ 4

//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);
}