2013-01-04 18 views
114

私はIEnumerable<T>の2つのインスタンスを持っています(同じT)。私は両方の連結であるIEnumerable<T>の新しいインスタンスが欲しいです。2つのIEnumerable <T>を新しいIEnumerable <T>に連結する方法はありますか

これを行うには.NETでビルドインメソッドがありますか、それとも自分で書き込む必要がありますか?

+9

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811bにブックマークします。 –

+0

関連する場合、[複数の要素のコレクションを組み合わせるエレガントな方法ですか?](http://stackoverflow.com/questions/4493858/elegant-way-to-combine-multiple-collections-of-elements) – nawfal

答えて

189

はい、オブジェクトへのLINQはEnumerable.Concatでこれをサポートしています。

var together = first.Concat(second); 
+0

いつも拡張メソッドを探すのを忘れて、tx。 –

+9

@SamuelRossilleまた、実行したいアクションの名前が、あなたが後にしているものと正確に呼ばれなければ、近いと思われることを忘れないでください。 IntelliSenseを常に閲覧し、多くのことを学びます。 –

+2

second = first.Concat(second)を実行するのは悪いですか?並行性の問題はありますか? – user2934433

4

あなたはあなたのソリューションのためのコードの下に使用することができます: -

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

Concat方法はどの実装するオブジェクトを返します。 IEnumerable<T>列挙子が2つの渡された列挙可能な項目(AとBを順に呼び出す)を順番に使用しようとするオブジェクト(Catと呼ぶ)を返すことによって、渡された列挙型が、Catの存続期間中に変更されず、副作用なしで読み取ることができるシーケンスを表す場合、Catを直接使用することができます。それ以外の場合は、ToList()Catに電話し、結果としてList<T>(AとBの内容のスナップショットを表す)を使用することをお勧めします。

一部の列挙型は、列挙の開始時にスナップショットを取得し、列挙時にコレクションが変更された場合、そのスナップショットからデータを返します。 Bがこのような列挙型である場合、CatがAの終わりに達する前に発生するBへの変更はCatの列挙に表示されますが、それ以降は変更されません。そのようなセマンティクスは混乱する可能性があります。 Catのスナップショットを撮ることで、このような問題を回避できます。

関連する問題