Converter string em List <string> em uma linha?

101

Eu tenho uma corda:

var names = "Brian,Joe,Chris";

Existe uma maneira de converter isso em um List<string>delimitado por ,em uma linha?

Brian David Berman
fonte
15
Não entendo o requisito "em uma linha". Tente escrever um código que seja claro e compreensível, e não maneiras de encaixar uma operação no menor espaço possível.
Ed S.
6
Com o advento do LINQ, "one liners" legíveis e limpos tornaram-se muito mais comuns no C # IMO.
Matt Greer
5
@Ed S. - Embora eu concorde que "em uma linha" pode não ser a melhor forma de expressar isso, declarações de uma única linha como a que Matt Greer fornece tendem a ser muito claras e compreensíveis. Meu palpite é que ele apenas deseja evitar o uso de um forloop, que é mais tedioso, sujeito a erros e confuso.
StriplingWarrior de
4
Não quero dizer que as frases curtas sejam inerentemente mais difíceis de entender, estou apenas dizendo que não devem ser um requisito. Faça da melhor maneira possível. Se isso acontecer em uma linha, ótimo, mas não é algo que deve moldar a maneira como você escreve seu código.
Ed S.

Respostas:

197
List<string> result = names.Split(new char[] { ',' }).ToList();

Ou ainda mais limpo pela sugestão de Dan:

List<string> result = names.Split(',').ToList();
Matt Greer
fonte
11
Você pode ter colocado lá de propósito, mas sempre deixo de fora a new char[] { }parte inteira . É mais legível assim, pelo menos para mim .
Dan Tao
4
@Dan: Eu concordo, e geralmente eu uso a sobrecarga de parâmetros. Mas, para responder a uma pergunta, às vezes acho que verbosidade é melhor. Na verdade, é apenas uma questão de opinião.
Matt Greer de
2
ToList () parece não estar mais disponível?
Gina Marano
10
Você trouxe o System.LINQnamespace?
Matt Greer
42

O List<T>tem um construtor que aceita IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));
Nathan Anderson
fonte
Excelente - não há necessidade de importar System.Linq
VictorySaber
3

Eu prefiro isso porque evita uma única lista de itens com um item vazio se sua string de origem estiver vazia:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();
KingOfHypocrites
fonte
1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

resultado:

Welcome

To 

Programming
Maghalakshmi Saravana
fonte
0

Se você já tem uma lista e deseja adicionar valores de uma string delimitada, pode usar AddRangeou InsertRange. Por exemplo:

existingList.AddRange(names.Split(','));
c32hedge
fonte
0

Use o pacote nuget Stringify.Library

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
Mithun Basak
fonte