2012-02-29 17 views
5

Mam kolekcję obiektów objcol1 (przykład Kolekcja miast w stanie) i inną kolekcję obiektów objcol2 (przykładowa kolekcja miast w kraju). Teraz szukam dla objcol1 i chcę go dodać do objcol2. Mogę to zrobić przez iterowanie przez objcol1 i dodawanie jeden po drugim do objcol2, ale mogę bezpośrednio dodać objcol1 do objcol2 jak objcol2.add (objcol1);Dodaj kolekcję obiektów do innej kolekcji obiektów bez iteracji

Czy ktoś może mi powiedzieć, czy jest to możliwe bez iteracji? Jeśli tak, proszę wyjaśnić mi proces

+0

Możliwy duplikat [Jak dołączyć kolekcję enumerable do istniejącej listy w C#] (http://stackoverflow.com/questions/4067223/how-to-append-enumerable-collection-to-an-existing -list-in-c-sharp) – Fragment

Odpowiedz

13

Można użyć metody Enumerable.Concat rozszerzenia:

objcol1 = objcol1.Concat(objcol2) 

Jestem pewien, że pod kołdrą gdzieś to faktycznie wykonuje iteracje, ale nie trzeba będzie napisać kod, aby zrobić to.

UWAGA: Będzie to działać tylko wtedy, gdy obiekty City są takie same, alternatywnie można użyć obiektu Select do odwzorowania obiektów.

+0

Dzięki temu zadziałało, jak potrzebowałem. – Deepak

+0

może być, ponieważ nie użyłeś objcol1 = objcol1.Concat (objcol2); – Jayanga

+0

Nieuczciwe, myślę, że to dobra odpowiedź +1 – Tx3

2

Tak, jest to możliwe w zależności od przypadku użycia. Jeśli nie obchodzi cię, jaki jest typ "kolekcji", możesz użyć polecenia linq Concat, aby utworzyć nowy wylicznik, który po iteracji będzie zawierał elementy z obu kolekcji.

var collection1 = new List<int> { 1, 2, 3 }; 
var collection2 = new [] { 4, 5, 6}; 

var concatenated = collection1.Concat(collection2); 

Jeśli, z drugiej strony, trzeba faktycznie wstawić elementy do istniejącej kolekcji, należy wykonać iterację.

1

Właściwie nie trzeba nowego var:

collection1.AddRange(collection2); 
7

Można również użyć AddRange listy. Aby uzyskać więcej informacji, patrz documentation.

var a = new List<string> { "1", "2" }; 
var b = new List<string> { "3", "4" }; 
a.AddRange(b); 

// a would contain "1", "2", "3" and "4" 
Powiązane problemy