Există un echivalent cu String.Split care returnează o listă generică?

Aș vrea să fac așa ceva:

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

Desigur, Foo.Split returnează o matrice unidimensională de String , nu o listă generică . Există o modalitate de a face acest lucru fără a iterării prin matrice pentru ao transforma într-un List generic?

12

7 răspunsuri

Dacă nu doriți să utilizați LINQ, puteți face:

Dim foo As String = "a,b,c,d,e"
Dim boo As New List(Of String)(foo.Split(","c))
31
adăugat
Nu știam despre c pentru a face un șir de caractere ... Am folosit întotdeauna new Char() {","} . Acesta este un * lot mai apropiat
adăugat autor freefaller, sursa

Puteți folosi constructorul Listei.

String foo = "a,b,c,d,e";
List boo = new List(foo.Split(","));
7
adăugat
Ați dat răspunsul la @Bob King pentru a răspunde în VB.NET - mulțumesc.
adăugat autor Herb Caudill, sursa
Ne pare rău covoare! Fara resentimente!
adăugat autor Bob King, sursa

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
adăugat
Puteți folosi IList , de fapt ar trebui (chiar dacă am uitat să scriu în exemplul codului meu de răspuns)
adăugat autor IAmCodeMonkey, sursa
Sunt de acord, deși încerc să intru în acest habbit.
adăugat autor Saif Khan, sursa

Cea mai ușoară metodă ar fi probabil metoda AddRange.

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

Boo.AddRange(Foo.Split(","c))
4
adăugat
Mulțumesc - acest lucru funcționează la fel de bine ca răspunsul acceptat, dar este puțin mai compact.
adăugat autor Herb Caudill, sursa
Cel mai bun răspuns pe o listă pe care am găsit-o ..
adăugat autor stigzler, sursa
Acest cod funcționează? Mi se pare că ar arunca o NullReferenceException.
adăugat autor Ryan Lundy, sursa
Ai dreptate. Am uitat să creez instanța Boo.
adăugat autor amcoder, sursa

Iată cum o fac eu ... din moment ce split-ul este în căutarea unei serii de char I clip de pe prima valoare din șirul meu.

var values = labels.Split(" "[0]).ToList();
0
adăugat

Dacă utilizați Linq, puteți utiliza metoda extensiei ToList ()

Dim strings As List = string_variable.Split().ToList();
0
adăugat
Cum vă propuneți să utilizați Linq pentru a interoga un șir separat prin virgulă?
adăugat autor Herb Caudill, sursa
Nu o interoghează. Metoda extensiei ToList() Codul Monkey arată că răspunsul său este doar o parte din clasa de funcționalitate comună cunoscută sub numele de "Linq" (și este utilizată pentru a susține interogarea LINQ, dar o puteți utiliza și pentru alte lucruri)
adăugat autor James Curran, sursa

Pentru a construi pe răspuns, am găsit următoarele foarte utile:

Return New List(Of String)(IO.File.ReadAllLines(sFileName))
0
adăugat