2010-01-04 8 views

Répondre

27

Cela devrait faire l'affaire

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

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

Est-ce le plus efficace, ou le moyen le plus pratique? –

+1

pstst .AddRange, Java est là-bas -> – blu

+0

@Ipthnc, je ne connais pas un autre moyen de le faire, autre que foreach() 'combiné avec' List.Add() '. Mais c'est sûr que c'est le moyen le plus pratique. –

10

Si vous utilisez C# 3.0/.Net 3.5:

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

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

À titre de clarification, cela nécessite .NET 3.5, pas seulement C# 3.0 (les méthodes d'extension font partie de C# 3.0, mais la classe 'System.Linq.Enumerable' qui les définit fait partie de. NET 3.5) –

+0

@Adam Robinson: Merci pour la précision. –

+1

Cela peut fonctionner sur .NET 2.0 si vous utilisez VS2008 et LinqBridge;) –

16

Vous pouvez simplement ajouter les éléments d'une liste à l'autre:

list1.AddRange(list2); 

Si vous souhaitez conserver les listes et en créer un nouveau:

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

ou en utilisant des méthodes LINQ:

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

Vous pouvez obtenir un peu de meilleures performances en créant une liste la capacité correcte avant d'ajouter les éléments:

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

Quelle est la différence entre le mot-clé de jointure et de cette façon vous avez déclaré? –