2010-09-03 5 views
1

J'ai besoin d'initialiser un tas de listes et de les remplir avec beaucoup de valeurs lors de l'initialisation, mais le compilateur csc 2.0 que je dois utiliser ne l'aime pas. Par exemple:Initialisation des listes qui rendent heureux csc

List<int> ints = new List<int>() { 1, 2, 3 }; 

produira l'erreur de compilation suivante:

erreur CS1002:; attendu

Est-il possible d'initialiser une liste qui fera compilateur csc 2.0 heureux sans faire quelque chose de laid comme ceci:

List<int> ints = new List<int>(); 
ints.Add(1); 
ints.Add(2); 
ints.Add(3); 
+3

Pourquoi ne vous ciblez que .NET 2 du compilateur .NET 3.5? – leppie

+0

@leppie La question indique "compilateur csc 2.0 que je dois utiliser". Il peut s'agir d'un serveur de construction qui n'est pas sous le contrôle des développeurs. – Jay

Répondre

10

Vous utilisez une fonctionnalité appelée initialiseurs de collection qui a été ajouté en C# 3.0 et n'est donc pas présent dans le compilateur C# 2.0. Le plus proche de la syntaxe est d'utiliser un tableau explicite transmis au constructeur List<T>.

List<int> ints = new List<int>(new int[] { 1, 2, 3 }); 

Remarque: Cette approche produit un code sensiblement différent de la version de l'initialiseur de collection C#.

1

Puisque vous initialisez un tas de listes, raccourcissez la syntaxe autant que possible. Ajouter une méthode d'assistance:

private static List<T> NewList<T>(params T[] items) 
{ 
    return new List<T>(items); 
} 

appel comme ceci:

List<int> ints = NewList(1,2,3); 
List<string> strings = NewList("one","two","three"); 
// etc. 
+0

Liste est beaucoup de code assez inutile vu que vous pouvez déclarer un nouveau tableau en ligne dans l'appel au constructeur List pour obtenir le même effet. –

+0

Est-ce que la liste de C# 2.0 n'a pas encore 'AddRange'? – Timwi

2
int[] values = { 1, 2, 3, 4 }; 
List<int> ints = new List<int>(values); 
Questions connexes