167 votes

Raccourci pour créer une liste d'éléments unique en C #

En C #, existe-t-il un raccourci en ligne pour instancier une liste <T> avec un seul élément?

Je suis en train de faire:

 new List<string>( new string[] { "title" } ))
 

Avoir ce code partout réduit la lisibilité. J'ai pensé à utiliser une méthode utilitaire comme celle-ci:

 public static List<T> SingleItemList<T>( T value )
{
    return (new List<T>( new T[] { value } ));
}
 

Donc je pourrais faire:

 SingleItemList("title");
 

Y a-t-il un moyen plus court / plus propre?

Merci.

301voto

M4N Points 48758

Utilisez simplement ceci:

 List<string> list = new List<string>() { "single value" };
 

Vous pouvez même omettre les accolades ():

 List<string> list = new List<string> { "single value" };
 

Mise à jour: bien sûr, cela fonctionne également pour plusieurs entrées:

 List<string> list = new List<string> { "value1", "value2", ... };
 

53voto

Joel Coehoorn Points 190579
 var list = new List<string>(1) { "hello" };
 

Très similaire à ce que d’autres ont publié, sauf qu’il garantit d’allouer uniquement de l’espace pour l’élément initial.

Bien sûr, si vous savez que vous allez ajouter un tas de choses plus tard, ce n'est peut-être pas une bonne idée, mais cela vaut la peine d'être mentionné une fois.

38voto

Jon Skeet Points 692016

L'idée de Michael d'utiliser des méthodes d'extension mène à quelque chose d'encore plus simple:

 public static List<T> InList(this T item)
{
    return new List<T> { item };
}
 

Alors tu pourrais faire:

 List<string> foo = "Hello".InList();
 

Je ne suis pas sûr que cela me plaise ou non, remarquez ...

18voto

Jon Skeet Points 692016

Une réponse différente de la précédente, basée sur l'exposition aux Google Java Collections :

 public static class Lists
{
    public static List<T> Of<T>(T item)
    {
        return new List<T> { item };
    }
}
 

Ensuite:

 List<string> x = Lists.Of("Hello");
 

Je conseille de vérifier le GJC - il contient beaucoup de choses intéressantes. (Personnellement, j'ignorerais la balise "alpha" - ce n'est que la version open source qui est "alpha" et elle est basée sur une API interne très stable et très utilisée .)

9voto

Michael Meadows Points 15277

Utilisez une méthode d'extension avec chaînage de méthodes.

 public static List<T> WithItems(this List<T> list, params T[] items)
{
    list.AddRange(items);
    return list;
}
 

Cela vous permettrait de faire ceci:

 List<string> strings = new List<string>().WithItems("Yes");
 

ou

 List<string> strings = new List<string>().WithItems("Yes", "No", "Maybe So");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X