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(newchar[]{','}).ToList();
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>:
string given="Welcome To Programming";List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list
//Default delimiter is ,var split =newStringConverter().ConvertTo<List<string>>(names);//You can also have your custom delimiter for e.g. ;var split =newStringConverter().ConvertTo<List<string>>(names,newConverterOptions{Delimiter=';'});
for
loop, que é mais tedioso, sujeito a erros e confuso.Respostas:
Ou ainda mais limpo pela sugestão de Dan:
fonte
new char[] { }
parte inteira . É mais legível assim, pelo menos para mim .System.LINQ
namespace?O
List<T>
tem um construtor que aceitaIEnumerable<T>
:fonte
Eu prefiro isso porque evita uma única lista de itens com um item vazio se sua string de origem estiver vazia:
fonte
Divida uma string delimitada por caracteres e retorne todos os elementos não vazios.
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8
fonte
resultado:
fonte
Se você já tem uma lista e deseja adicionar valores de uma string delimitada, pode usar
AddRange
ouInsertRange
. Por exemplo:fonte
Use o pacote nuget Stringify.Library
fonte