IEnumerable<T>
の2つのインスタンスがあります(同じT
を使用)。両方を連結したIEnumerable<T>
の新しいインスタンスが必要です。
それを行うための.Netのビルドインメソッドはありますか、自分で作成する必要がありますか?
はい、LINQ to Objectsはこれを Enumerable.Concat
でサポートしています。
var together = first.Concat(second);
注意:first
またはsecond
がnullの場合、ArgumentNullException
を受け取ります。これを回避し、空のセットと同様にヌルを処理するには、次のようにヌル合体演算子を使用します。
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
Concat
メソッドは、渡された2つの列挙可能な項目(AおよびB)を順番に使用しようとする列挙子を持つオブジェクト(Catと呼びます)を返すことにより、IEnumerable<T>
を実装するオブジェクトを返します。渡された列挙型が、Catの存続期間中に変化せず、副作用なしで読み取ることができるシーケンスを表す場合、Catを直接使用できます。そうでない場合は、Cat
でToList()
を呼び出し、結果のList<T>
(AおよびBの内容のスナップショットを表す)を使用することをお勧めします。
一部の列挙型は、列挙の開始時にスナップショットを取得し、列挙中にコレクションが変更された場合、そのスナップショットからデータを返します。 Bがそのような列挙型である場合、CatがAの最後に到達する前に発生するBへの変更は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);
}