Konwertować ciąg na List <string> w jednym wierszu?

102

Mam ciąg:

var names = "Brian,Joe,Chris";

Czy istnieje sposób, aby przekonwertować to na List<string>rozdzielone ,w jednym wierszu?

Brian David Berman
źródło
15
Nie rozumiem wymogu „w jednym wierszu”. Strzelaj do pisania kodu, który jest jasny i zrozumiały, a nie sposobów na dopasowanie operacji do tak małej przestrzeni, jak to tylko możliwe.
Ed S.,
6
Wraz z pojawieniem się LINQ, „jednolite wkładki”, które są czytelne i czyste, stały się znacznie bardziej powszechne w C # IMO.
Matt Greer,
5
@Ed S. - Chociaż zgadzam się, że wyrażenie „w jednej linijce” może nie być najlepszym sposobem wyrażenia tego, jednowierszowe stwierdzenia, takie jak to, które podaje Matt Greer, są zwykle bardzo jasne i zrozumiałe. Domyślam się, że po prostu chce uniknąć używania forpętli, która jest bardziej żmudna, podatna na błędy i niejasna.
StriplingWarrior
4
Nie chcę przez to powiedzieć, że jednolinijki są z natury trudniejsze do zrozumienia, mówię tylko, że nigdy nie powinno to być wymogiem. Po prostu zrób to w najlepszy dostępny sposób. Jeśli tak się składa, że ​​znajduje się w jednym wierszu, to świetnie, ale nie jest to coś, co powinno kształtować sposób, w jaki piszesz kod.
Ed S.,

Odpowiedzi:

198
List<string> result = names.Split(new char[] { ',' }).ToList();

Lub nawet czystszy według sugestii Dana:

List<string> result = names.Split(',').ToList();
Matt Greer
źródło
11
Być może umieściłeś to tam celowo, ale zawsze pomijam całą new char[] { }część. W ten sposób jest bardziej czytelny, przynajmniej dla mnie .
Dan Tao,
4
@Dan: Zgadzam się i generalnie używam przeciążenia params. Ale jeśli chodzi o odpowiedź na pytanie, czasami czuję, że gadatliwość jest lepsza. To tylko kwestia opinii.
Matt Greer,
2
ToList () nie wydaje się już przydać?
Gina Marano
10
Czy wprowadziłeś System.LINQprzestrzeń nazw?
Matt Greer
42

List<T>Konstruktor który akceptuje IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));
Nathan Anderson
źródło
Doskonałe - nie trzeba importować System.Linq
VictorySaber
3

Wolę to, ponieważ zapobiega pojedynczej liście pozycji z pustym elementem, jeśli ciąg źródłowy jest pusty:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();
KingOfHypocrites
źródło
1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

wynik:

Welcome

To 

Programming
Maghalakshmi Saravana
źródło
0

Jeśli masz już listę i chcesz dodać wartości z ciągu rozdzielanego, możesz użyć AddRangelub InsertRange. Na przykład:

existingList.AddRange(names.Split(','));
c32hedge
źródło
0

Użyj pakietu 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 = ';' });
Mithun Basak
źródło