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(newchar[]{','}).ToList();
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>:
string given="Welcome To Programming";List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list
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:
//Default delimiter is ,var split =newStringConverter().ConvertTo<List<string>>(names);//You can also have your custom delimiter for e.g. ;var split =newStringConverter().ConvertTo<List<string>>(names,newConverterOptions{Delimiter=';'});
for
Schleife zu verwenden, die langwieriger, fehleranfälliger und unklarer ist.Antworten:
Oder noch sauberer durch Dans Vorschlag:
quelle
new char[] { }
Teil weg . So ist es zumindest für mich besser lesbar .System.LINQ
Namespace mitgebracht?Der
List<T>
hat einen Konstruktor, der Folgendes akzeptiertIEnumerable<T>
:quelle
Ich bevorzuge dies, weil es eine einzelne Elementliste mit einem leeren Element verhindert, wenn Ihre Quellzeichenfolge leer ist:
quelle
Teilen Sie eine durch Zeichen begrenzte Zeichenfolge und geben Sie alle nicht leeren Elemente zurück.
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8
quelle
Ausgabe:
quelle
Wenn Sie bereits eine Liste haben und Werte aus einer durch Trennzeichen getrennten Zeichenfolge hinzufügen möchten, können Sie
AddRange
oder verwendenInsertRange
. Beispielsweise:quelle
Verwenden Sie das Nuget-Paket Stringify.Library
quelle