2010-01-04 18 views

risposta

27

Questo dovrebbe fare il trucco

List<Type> list1; 
List<Type> list2; 

List<Type> combined; 
combined.AddRange(list1); 
combined.AddRange(list2); 
+0

È il più efficiente, oppure il modo più conveniente? –

+1

pstst .AddRange, Java è laggiù -> – blu

+0

@Ipthnc, non conosco un altro modo per farlo, diverso da un 'foreach()' combinato con 'List.Add()'. Ma è sicuramente il modo più conveniente. –

10

Se stai usando C# 3.0/Net 3.5:

List<SomeType> list1; 
List<SomeType> list2; 

var list = list1.Concat(list2).ToList(); 
+0

Come chiarimento, questo richiede .NET 3.5, non solo C# 3.0 (i metodi di estensione sono una parte di C# 3.0, ma la classe 'System.Linq.Enumerable' che li definisce fa parte di. NET 3.5) –

+0

@Adam Robinson: Grazie per la precisione. –

+1

Questo può funzionare su .NET 2.0 se si utilizza VS2008 e LinqBridge;) –

16

Puoi semplicemente aggiungere gli articoli da una lista all'altra:

list1.AddRange(list2); 

Se si desidera mantenere le liste e crearne uno nuovo:

List<T> combined = new List<T>(list1); 
combined.AddRange(list2); 

o utilizzando modalità di LINQ:

List<T> combined = list1.Concat(list2).ToList(); 

si può ottenere un po 'meglio le prestazioni con la creazione di un elenco con la capacità corretta prima di aggiungere gli articoli:

List<T> combined = new List<T>(list1.Count + list2.Count); 
combined.AddRange(list1); 
combined.AddRange(list2); 
+0

Qual è la differenza tra la parola chiave join e in questo modo dichiarata? –