Como inicializar uma lista de strings (List <string>) com muitos valores de string


358

Como é possível inicializar (com um inicializador de C #) uma lista de seqüências de caracteres? Eu tentei com o exemplo abaixo, mas não está funcionando.

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

há um exemplo aqui para uma lista multidimensional na resposta a esta pergunta stackoverflow.com/questions/34473358/...
barlop

Respostas:


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

150
Eu não acho que haja um bom motivo para inicializar uma matriz de cadeias aqui para criar este objeto. Quem estiver procurando, use uma das outras respostas.
Robert Smith

2
@Unsliced ​​e @Padel têm respostas mais corretas. Não há necessidade de passar em outra newcoisa se você inicializar com{ }
Don Cheadle

Para C ++ CLI, é como:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei

@Bobrot why? porque alocar um new String[]não é eficiente?
Dylan Czenski

8
@DylanChensky eu diria como regra geral, fazer qualquer coisa desnecessária é ineficiente. É verdade que essa instância pode não ser muito importante, mas imagine se o seu código estiver repleto de itens como este. Pode fazer uma grande diferença no geral, principalmente quando se trata de uso de memória.
Robert Smith

557

Basta remover ()no final.

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

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Inicializadores de coleção"
Lucero

Você está se referindo a uma versão específica do .NET / C #? Tanto quanto eu sei este trabalho da v3.5 e posterior. Não sei quanto a 2.0, porque eu não tê-lo usado por um tempo ...
Padel

11
asp.net 2.0 btw Eu recebo o erro após {-> Erro 7 Uma nova expressão requer () ou [] após o tipo
Bilgin Kılıç

4
Em 2,0 você deve usá-lo como este: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Observe o ()aqui: new List<string>().
Padel

3
É um recurso de linguagem C # 3 e não tem nada a ver com a versão da estrutura que você está usando. Se você ainda estiver usando o Visual Studio 2005, não poderá usar esse recurso.
Phil Gan

145

Você realmente não fez uma pergunta, mas o código deve ser

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

ou seja, não à direita () após a lista.


Erro 7 Uma nova expressão requer () ou [] após o tipo
Bilgin Kılıç

2
@blgnklc, porque você está usando C # 2, que não suporta esse recurso.
Phil Gan

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

Acima, duas são as formas mais curtas, consulte https://www.dotnetperls.com/list


11
É preferível à resposta aceita? Parece simples, sem a necessidade de um intermediáriostring[]
Ehtesh Choudhury

var animals = new List<string> { "bird", "dog" };não foi sugerido na resposta aceita. Além disso, (new string[]há um comando de adição na resposta aceita que pode ser evitado.
Sujoy 30/05/19

14

Sua função está ótima, mas não está funcionando porque você coloca o ()depois do último }. Se você mover ()para o topo, próximo ao new List<string>()erro, será interrompido.

Amostra abaixo:

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

7

É assim que você inicializa e também pode usar List.Add () caso queira torná-lo mais dinâmico.

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

Dessa forma, se você estiver recebendo valores do IO, poderá adicioná-lo a uma lista alocada dinamicamente.


2

Mova colchetes como este:

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

0

Um recurso muito interessante é que o inicializador de listas também funciona bem com classes personalizadas: você precisa implementar a interface IEnumerable e ter um método chamado Add .

Por exemplo, se você tem uma classe personalizada como esta:

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();
    }
}

isso vai funcionar:

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

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

3
Por favor, adicione algumas explicações à sua resposta
mechnicov 02/04/19

Desculpe, mas a pergunta é sobre como inicializar uma lista com vários valores. Isso inicializa a string e ENTÃO adiciona os valores, não o mesmo caso.
c-chavez

-8

É assim que você faria.

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

Não se esqueça de adicionar

using System.Collections.Generic;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.