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"
}();
Bilgin Kılıç
la source
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" });
Zenzer
la source
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 */ };
Padel
la source
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.

Non tranché
la source
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

Sujoy
la source
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"
};
Marcello Mello
la source
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.

Enye Aaron Shi
la source
2

Déplacez les crochets comme ceci:

var optionList = new List<string>(){"AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"};
Andrew Kozlov
la source
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"
}
adospace
la source
-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");
Raj
la source
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;

Muhammad Ali
la source