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

Sem fatias
fonte
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

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

Enye Aaron Shi
fonte
2

Mova colchetes como este:

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

Muhammad Ali
fonte