İki örneğim var IEnumerable<T>
(aynı ile T
). Her IEnumerable<T>
ikisinin birleşimi olan yeni bir örnek istiyorum .
.Net'te bunu yapmak için yerleşik bir yöntem var mı yoksa bunu kendim mi yazmak zorundayım?
İki örneğim var IEnumerable<T>
(aynı ile T
). Her IEnumerable<T>
ikisinin birleşimi olan yeni bir örnek istiyorum .
.Net'te bunu yapmak için yerleşik bir yöntem var mı yoksa bunu kendim mi yazmak zorundayım?
Yanıtlar:
Evet, LINQ to Objects bunu aşağıdakilerle destekler Enumerable.Concat
:
var together = first.Concat(second);
Not: Olmalı first
veya second
boş kalmalısınız ArgumentNullException
. Bunu önlemek ve null değerlerini boş bir küme gibi işlemek için null birleştirme operatörünü şu şekilde kullanın:
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
using System.Linq
IDE anlaşmasında istenen uzantı yöntemini görmek için kod dosyasının üst kısmındaki ad alanını içe aktarmak gerekir .
Concat
Yöntem uygulayan bir nesne döndürür IEnumerable<T>
olan Numaralayıcı kullanmayı dener bir nesne döndürerek (Kat arama) iki geçirildi, numaralandırılabilir ürünlerinin sırayla (onları A ve B olarak adlandırılır). İçerideki numaralandırıcılar, Cat'in ömrü boyunca değişmeyecek ve yan etkiler olmadan okunabilecek sekansları temsil ediyorsa, Cat doğrudan kullanılabilir. Aksi takdirde, çağrı için iyi bir fikir olabilir ToList()
üzerinde Cat
ve elde edilen kullanın List<T>
(A ve B içeriğinin temsil edecek bir anlık).
Bazı numaralandırmalar numaralandırma başladığında bir anlık görüntü alır ve numaralandırma sırasında koleksiyon değiştirilirse bu anlık görüntüden veri döndürür. B bu kadar numaralandırılabilir ise, Cat'in A'nın sonuna gelmeden önce gerçekleşen B'deki herhangi bir değişiklik, Cat'in numaralandırmasında görünecektir, ancak bundan sonra meydana gelen değişiklikler olmayacaktır. Bu tür anlambilim muhtemelen kafa karıştırıcı olabilir; Cat'in anlık görüntüsünü almak bu tür sorunları önleyebilir.
Çözümünüz için aşağıdaki kodu kullanabilirsiniz: -
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 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);
}