Como posso inicializar uma lista C # na mesma linha em que declaro. (Exemplo de coleção de strings de IEnumerable)

107

Estou escrevendo meu código de teste e não quero escrever:

List<string> nameslist = new List<string>();
nameslist.Add("one");
nameslist.Add("two");
nameslist.Add("three");

Eu adoraria escrever

List<string> nameslist = new List<string>({"one", "two", "three"});

No entanto {"one", "two", "three"} não é uma "Coleção de strings de IEnumerable". Como posso inicializar isso em uma linha usando a coleção de strings IEnumerable "?

Johannes
fonte

Respostas:

168
var list = new List<string> { "One", "Two", "Three" };

Essencialmente, a sintaxe é:

new List<Type> { Instance1, Instance2, Instance3 };

Que é traduzido pelo compilador como

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");
Matthew Abbott
fonte
Eu gosto desse método sem parênteses, com qual versão c # ele começou?
SilverbackNet
9
Não é bem traduzido nisso, pelo menos não em geral. A atribuição à variável acontece após todas as Addchamadas terem sido feitas - é como se ela usasse uma variável temporária, com list = tmp;no final. Isso pode ser importante se você estiver reatribuindo o valor de uma variável.
Jon Skeet
Propriedades automáticas e inicializadores de objetos foram introduzidos com o .NET 3, acredito, é a mesma versão do Framework, apenas um compilador atualizado para oferecer suporte ao LINQ.
Matthew Abbott
@Jon, Saúde, nunca conheci essa parte. : D
Matthew Abbott
@Jon Skeet: "... Isso pode ser importante se você estiver reatribuindo o valor de uma variável." você pode explicar um pouco mais sobre esta observação?
Tony
17

Altere o código para

List<string> nameslist = new List<string> {"one", "two", "three"};

ou

List<string> nameslist = new List<string>(new[] {"one", "two", "three"});
Adriaan Stander
fonte
qual é o propósito de usar a segunda linha "List <string> nameslist = new List <string> (new [] {" one "," two "," three "});" quando podemos usá-la? Além disso, o que significa "novo [] {...}" na segunda sintaxe? Por que nova palavra-chave é usada junto com o parêntese [] ???
Tony
6

Basta perder o parêntese:

var nameslist = new List<string> { "one", "two", "three" };
Richard Fawcett
fonte
Ops, parece que cinco pessoas chegaram antes de mim.
Richard Fawcett
3
List<string> nameslist = new List<string> {"one", "two", "three"} ?
Romain Meresse
fonte
3

Remova os parênteses:

List<string> nameslist = new List<string> {"one", "two", "three"};
Tim Robinson
fonte
3

Depende de qual versão do C # você está usando, da versão 3.0 em diante você pode usar ...

List<string> nameslist = new List<string> { "one", "two", "three" };
Sam Salisbury
fonte
1

Eu acho que isso funcionará para valores int, long e string.

List<int> list = new List<int>(new int[]{ 2, 3, 7 });


var animals = new List<string>() { "bird", "dog" };
Muhammad Awais
fonte
0

Esta é uma maneira.

List<int> list = new List<int>{ 1, 2, 3, 4, 5 };

Essa é outra maneira.

List<int> list2 = new List<int>();

list2.Add(1);

list2.Add(2);

O mesmo acontece com cordas.

Por exemplo:

List<string> list3 = new List<string> { "Hello", "World" };
Min
fonte