Existe um equivalente a String.Split que retorna uma lista genérica?

Eu gostaria de fazer algo assim:

Dim Foo as String = "a,b,c,d,e"
Dim Boo as List(of String) = Foo.Split(","c)

É claro que Foo.Split retorna uma matriz unidimensional de String , não uma List genérica. Existe uma maneira de fazer isso sem iterar através do array para transformá-lo em uma lista genérica?

12

7 Respostas

Se você não quiser usar o LINQ, você pode fazer:

Dim foo As String = "a,b,c,d,e"
Dim boo As New List(Of String)(foo.Split(","c))
31
adicionado
Não sabia sobre o c para tornar uma string um caractere ... Eu sempre usei new Char() {","} . Isso é um * muito mais limpo
adicionado o autor freefaller, fonte

Você pode usar o construtor da lista.

String foo = "a,b,c,d,e";
List boo = new List(foo.Split(","));
7
adicionado
Deu a resposta para @Bob King por responder em VB.NET - obrigado.
adicionado o autor Herb Caudill, fonte
Desculpe esteiras! Sem ressentimentos!
adicionado o autor Bob King, fonte

Do you really need a List or will IList do? Because string[] already implements the latter... just another reason why it's worth programming to the interfaces where you can. (It could be that in this case you really can't, admittedly.)

6
adicionado
Você pode usar IList , na verdade você deve (mesmo que eu tenha esquecido no exemplo de código da minha resposta)
adicionado o autor IAmCodeMonkey, fonte
Eu concordo, embora eu esteja tentando entrar neste habbit.
adicionado o autor Saif Khan, fonte

O método mais fácil provavelmente seria o método AddRange.

Dim Foo as String = "a,b,c,d,e"
Dim Boo as List(of String)

Boo.AddRange(Foo.Split(","c))
4
adicionado
Obrigado - isso funciona bem como a resposta aceita, mas é um pouco menos compacta.
adicionado o autor Herb Caudill, fonte
Melhor resposta em dividir a lista de eu encontrei ..
adicionado o autor stigzler, fonte
Esse código funciona? Parece-me que iria lançar um NullReferenceException.
adicionado o autor Ryan Lundy, fonte
Você está certo. Esqueci de criar a instância de Boo.
adicionado o autor amcoder, fonte

Aqui está como eu estou fazendo isso ... desde que a divisão está procurando por uma matriz de char eu recorte o primeiro valor na minha string.

var values = labels.Split(" "[0]).ToList();
0
adicionado

Se você usar o Linq, você pode usar o método de extensão ToList ()

Dim strings As List = string_variable.Split().ToList();
0
adicionado
Como exatamente você propõe o uso do Linq para consultar uma string separada por vírgula?
adicionado o autor Herb Caudill, fonte
Ele não está perguntando isso. O método de extensão ToList() que o Code Monkey mostra em sua resposta é apenas parte da classe de funcionalidade comumente conhecida como "Linq" (e é usada para suportar a consulta LINQ, mas você pode usá-la para outras coisas)
adicionado o autor James Curran, fonte

Para construir a resposta, achei o seguinte muito útil:

Return New List(Of String)(IO.File.ReadAllLines(sFileName))
0
adicionado