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?


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();

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(','));

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>();


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

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(','));

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 = ';' });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.