Comment initialiser une liste de chaînes (List <string>) avec de nombreuses valeurs de chaîne


358

Comment est-il possible d'initialiser (avec un initialiseur C #) une liste de chaînes? J'ai essayé avec l'exemple ci-dessous mais cela ne fonctionne pas.

List<string> optionList = new List<string>
{
    "AdditionalCardPersonAddressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
}();

il y a un exemple ici pour une liste multidimensionnelle dans la réponse à cette question stackoverflow.com/questions/34473358/…
barlop

Réponses:


464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });

150
Je ne pense pas qu'il y ait une bonne raison d'initialiser un tableau de chaînes ici pour créer cet objet. Quiconque cherche, veuillez utiliser l'une des autres réponses.
Robert Smith

2
@Unsliced ​​et @Padel ont des réponses plus correctes imo. Pas besoin de passer autre newchose si vous initialisez avec{ }
Don Cheadle

Pour C ++ CLI, c'est comme:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei

@Bobrot pourquoi? car allouer un new String[]n'est pas efficace?
Dylan Czenski

8
@DylanChensky Je dirais qu'en règle générale, faire quoi que ce soit d'inutile est inefficace. Certes, cette seule instance pourrait ne pas être un gros problème, mais imaginez si votre code est jonché d'articles comme celui-ci. Cela pourrait faire une grande différence dans l'ensemble, surtout en ce qui concerne l'utilisation de la mémoire.
Robert Smith

557

Retirez simplement ()à la fin.

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Initialiseurs de collection"
Lucero

Faites-vous référence à une version spécifique de .NET / C #? Autant que je sache, ce travail à partir de la version 3.5 et ultérieure. Je ne connais pas le 2.0 car je ne l'ai pas utilisé depuis un moment ...
Padel

1
asp.net 2.0 btw J'obtiens l'erreur après {-> Erreur 7 Une nouvelle expression requiert () ou [] après le type
Bilgin Kılıç

4
En 2.0 , vous devez l' utiliser comme ceci: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Notez le ()ici: new List<string>().
Padel

3
C'est une fonctionnalité du langage C # 3 et n'a rien à voir avec la version du framework que vous utilisez. Si vous utilisez toujours Visual Studio 2005, vous ne pourrez pas utiliser cette fonctionnalité.
Phil Gan

145

Vous n'avez pas vraiment posé de question, mais le code devrait être

List<string> optionList = new List<string> { "string1", "string2", ..., "stringN"}; 

c'est-à-dire pas de suivi () après la liste.


Erreur 7 Une nouvelle expression nécessite () ou [] après le type
Bilgin Kılıç

2
@blgnklc, car vous utilisez C # 2 qui ne prend pas en charge cette fonctionnalité.
Phil Gan

25
var animals = new List<string> { "bird", "dog" };
List<string> animals= new List<string> { "bird", "dog" };

Au-dessus de deux sont les moyens les plus courts, veuillez consulter https://www.dotnetperls.com/list


1
Est-ce préféré à la réponse acceptée? Cela semble plus simple, sans besoin d'intermédiairestring[]
Ehtesh Choudhury

var animals = new List<string> { "bird", "dog" };n'a pas été suggéré dans la réponse acceptée. En (new string[]outre, une commande d'addition dans la réponse acceptée peut être évitée.
Sujoy

14

Votre fonction est très bien mais ne fonctionne pas parce que vous mettez ()la dernière }. Si vous déplacez le() vers le haut juste à côté de new List<string>()l'erreur, l'arrêt s'arrête.

Exemple ci-dessous:

List<string> optionList = new List<string>()
{
    "AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
};

7

C'est ainsi que vous initialisez et vous pouvez également utiliser List.Add () au cas où vous voudriez le rendre plus dynamique.

List<string> optionList = new List<string> {"AdditionalCardPersonAdressType"};
optionList.Add("AutomaticRaiseCreditLimit");
optionList.Add("CardDeliveryTimeWeekDay");

De cette façon, si vous prenez des valeurs dans IO, vous pouvez les ajouter à une liste allouée dynamiquement.


2

Déplacez les crochets comme ceci:

var optionList = new List<string>(){"AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"};

0

Une fonctionnalité vraiment cool est que l'initialiseur de liste fonctionne très bien avec les classes personnalisées: vous n'avez qu'à implémenter l' interface IEnumerable et avoir une méthode appelée Add .

Par exemple, si vous avez une classe personnalisée comme celle-ci:

class MyCustomCollection : System.Collections.IEnumerable
{
    List<string> _items = new List<string>();

    public void Add(string item)
    {
        _items.Add(item);
    }

    public IEnumerator GetEnumerator()
    {
        return _items.GetEnumerator();
    }
}

cela fonctionnera:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}

-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");

3
Veuillez ajouter des explications à votre réponse
mechnicov

Désolé, mais la question concerne l'initialisation d'une liste avec plusieurs valeurs. Cela initialise la chaîne et ALORS il ajoute les valeurs, pas le même cas.
c-chavez

-8

Voilà comment vous le feriez.

List <string> list1 = new List <string>();

N'oubliez pas d'ajouter

using System.Collections.Generic;

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.