String in List <string> in einer Zeile konvertieren?


99

Ich habe eine Zeichenfolge:

var names = "Brian,Joe,Chris";

Gibt es eine Möglichkeit, dies in eine List<string>durch ,eine Zeile getrennte umzuwandeln ?


15
Ich verstehe die Anforderung "in einer Zeile" nicht. Nehmen Sie an, um Code zu schreiben, der klar und verständlich ist, und nicht, um eine Operation auf kleinstem Raum unterzubringen.
Ed S.

6
Mit dem Aufkommen von LINQ sind "One-Liner", die lesbar und sauber sind, in C # IMO viel häufiger geworden.
Matt Greer

5
@Ed S. - Obwohl ich der Meinung bin, dass "in einer Zeile" möglicherweise nicht der beste Weg ist, um es auszudrücken, sind einzeilige Aussagen wie die von Matt Greer in der Regel sehr klar und verständlich. Ich vermute, er möchte nur vermeiden, eine forSchleife zu verwenden, die langwieriger, fehleranfälliger und unklarer ist.
StriplingWarrior

4
Ich will damit nicht sagen, dass Einzeiler von Natur aus schwerer zu verstehen sind, ich sage nur, dass dies niemals eine Anforderung sein sollte. Mach es einfach so, wie es nur geht. Wenn das zufällig in einer Zeile steht, ist das großartig, aber es sollte nicht die Art und Weise beeinflussen, wie Sie Ihren Code schreiben.
Ed S.

Antworten:


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

Oder noch sauberer durch Dans Vorschlag:

List<string> result = names.Split(',').ToList();

11
Sie haben es vielleicht absichtlich dort hingelegt, aber ich lasse immer den ganzen new char[] { }Teil weg . So ist es zumindest für mich besser lesbar .
Dan Tao

4
@ Dan: Ich stimme zu und im Allgemeinen verwende ich die Parameterüberladung. Aber für eine Antwort auf eine Frage denke ich manchmal, dass Ausführlichkeit besser ist. Nur eine Ansichtssache.
Matt Greer

2
ToList () scheint nicht mehr verfügbar zu sein?
Gina Marano

10
Hast du den System.LINQNamespace mitgebracht?
Matt Greer

42

Der List<T>hat einen Konstruktor, der Folgendes akzeptiert IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));

Excellent - keine Notwendigkeit System.Linq zu importieren
VictorySaber

3

Ich bevorzuge dies, weil es eine einzelne Elementliste mit einem leeren Element verhindert, wenn Ihre Quellzeichenfolge leer ist:

  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

Ausgabe:

Welcome

To 

Programming

0

Wenn Sie bereits eine Liste haben und Werte aus einer durch Trennzeichen getrennten Zeichenfolge hinzufügen möchten, können Sie AddRangeoder verwenden InsertRange. Beispielsweise:

existingList.AddRange(names.Split(','));

0

Verwenden Sie das Nuget-Paket 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 = ';' });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.