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.