¿Hay un equivalente a String.Split que devuelve una lista genérica?

Me gustaría hacer algo como esto:

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

Por supuesto, Foo.Split devuelve una matriz unidimensional de String , no una genérica List . ¿Hay alguna manera de hacer esto sin iterar a través de la matriz para convertirla en una lista genérica ?

12

7 Respuestas

Si no quiere usar LINQ, puede hacer:

Dim foo As String = "a,b,c,d,e"
Dim boo As New List(Of String)(foo.Split(","c))
31
agregado
No sabía acerca del c para hacer que una cadena sea un personaje ... Siempre he usado new Char() {","} en su lugar. Eso es un * mucho más limpio
agregado el autor freefaller, fuente

Puedes usar el constructor de la Lista.

String foo = "a,b,c,d,e";
List boo = new List(foo.Split(","));
7
agregado
Dio una respuesta a @Bob King por responder en VB.NET, gracias.
agregado el autor Herb Caudill, fuente
Lo siento esteras! ¡Sin resentimientos!
agregado el autor Bob King, fuente

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
agregado
Puedes usar IList , de hecho deberías (aunque lo olvidé en el ejemplo del código de mi respuesta)
agregado el autor IAmCodeMonkey, fuente
Estoy de acuerdo, aunque estoy tratando de entrar en este habbit.
agregado el autor Saif Khan, fuente

El método más fácil sería probablemente el método AddRange.

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

Boo.AddRange(Foo.Split(","c))
4
agregado
Gracias: esto funciona tan bien como la respuesta aceptada, pero es un poco menos compacto.
agregado el autor Herb Caudill, fuente
La mejor respuesta en dividir a la lista de que he encontrado ..
agregado el autor stigzler, fuente
Ese código funciona? Me parece que arrojaría una NullReferenceException.
agregado el autor Ryan Lundy, fuente
Tienes razón. Olvidé crear la instancia de Boo.
agregado el autor amcoder, fuente

Así es como lo estoy haciendo ... dado que la división está buscando una matriz de caracteres, corto el primer valor de mi cadena.

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

Si usa Linq, puede usar el método de extensión ToList ()

Dim strings As List = string_variable.Split().ToList();
0
agregado
¿Cómo propone usar Linq para consultar una cadena separada por comas?
agregado el autor Herb Caudill, fuente
Él no lo está preguntando. El método de extensión de ToList() que muestra Code Monkey en su respuesta es solo parte de la clase de funcionalidad conocida como "Linq" (y se usa para admitir consultas LINQ, pero puede usarlo para otras cosas)
agregado el autor James Curran, fuente

Para construir sobre la respuesta, he encontrado lo siguiente muy útil:

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