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?


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

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(','));

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


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

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(','));

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 = ';' });
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.