2009-09-10 5 views
0

Est-il possible d'initialiser une liste avec d'autres listes en C#? Dire que j'ai ces listes:Syntaxe pour l'initialisation d'une liste <T> avec la liste existante Objets <T>

List<int> set1 = new List<int>() {1, 2, 3}; 
List<int> set2 = new List<int>() {4, 5, 6}; 

Ce que je voudrais avoir est un raccourci pour ce code:

List<int> fullSet = new List<int>(); 
fullSet.AddRange(set1); 
fullSet.AddRange(set2); 

Merci à l'avance!

+0

Parlez-vous de .NET 2/3 ou 3.5? La plupart des solutions ici sont pour seulement 3.5. – Lucero

Répondre

8

Pour autoriser les doublons (comme dans votre exemple):

List<int> fullSet = set1.Concat(set2).ToList(); 

Ceci peut être généralisé pour plus de listes, à savoir ...Concat(set3).Concat(set4). Si vous souhaitez supprimer des éléments en double (les éléments qui apparaissent dans les deux listes):

List<int> fullSet = set1.Union(set2).ToList(); 
0
var fullSet = set1.Union(set2); // returns IEnumerable<int> 

Si vous voulez Liste <int> au lieu de IEnumerable <int> vous pouvez faire:

1
 static void Main(string[] args) 
     { 
      List<int> set1 = new List<int>() { 1, 2, 3 }; 
      List<int> set2 = new List<int>() { 4, 5, 6 }; 

      List<int> set3 = new List<int>(Combine(set1, set2)); 
     } 

     private static IEnumerable<T> Combine<T>(IEnumerable<T> list1, IEnumerable<T> list2) 
     { 
      foreach (var item in list1) 
      { 
       yield return item; 
      } 

      foreach (var item in list2) 
      { 
       yield return item; 
      } 
     } 
+1

C'est juste Enumerable.Concat bien sûr ... –

+0

Je ne sais pas pourquoi quand j'ai répondu à la question, je pensais que l'OP cherchait une solution 2.0 .... Je ne sais pas où j'ai eu ça de ..... – BFree