IEnumerable<T>
(同じT
)の2つのインスタンスがあります。IEnumerable<T>
両方を連結した新しいインスタンスが必要です。
それを行うための.Netの組み込みメソッドはありますか、それとも自分で書く必要がありますか?
IEnumerable<T>
(同じT
)の2つのインスタンスがあります。IEnumerable<T>
両方を連結した新しいインスタンスが必要です。
それを行うための.Netの組み込みメソッドはありますか、それとも自分で書く必要がありますか?
回答:
はい、LINQ to ObjectsはこれをEnumerable.Concat
次のようにサポートしています:
var together = first.Concat(second);
NB:万一first
またはsecond
あなたが受け取ることになるnullになりますArgumentNullException
。これを回避し、空のセットと同様にnullを処理するには、次のようにnull結合演算子を使用します。
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
using System.Linq
IDEインテリセンスで目的の拡張メソッドを表示するには、コードファイルの先頭に名前空間をインポートする必要があります。
このConcat
メソッドはIEnumerable<T>
、列挙子が2つの渡された列挙可能な項目(AおよびBと呼ぶ)を順番に使用しようとするオブジェクト(Catと呼ぶ)を返すことで実装するオブジェクトを返します。渡された列挙型がCatの存続期間中に変更されず、副作用なしで読み取ることができるシーケンスを表す場合、Catを直接使用できます。それ以外の場合は、結果(AおよびBの内容のスナップショットを表す)を呼び出しToList()
てCat
使用することをお勧めしますList<T>
。
一部の列挙可能オブジェクトは、列挙の開始時にスナップショットを取得し、列挙中にコレクションが変更された場合、そのスナップショットからデータを返します。Bがこのような列挙可能な場合、CatがAの終わりに達する前に発生するBへの変更は、Catの列挙に表示されますが、その後に発生する変更は表示されません。そのようなセマンティクスはおそらく混乱するかもしれません。猫のスナップショットを取ることで、このような問題を回避できます。
// The answer that 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);
}