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(newchar[]{','}).ToList();
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>:
string given="Welcome To Programming";List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list
//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
pętli, która jest bardziej żmudna, podatna na błędy i niejasna.Odpowiedzi:
Lub nawet czystszy według sugestii Dana:
źródło
new char[] { }
część. W ten sposób jest bardziej czytelny, przynajmniej dla mnie .System.LINQ
przestrzeń nazw?List<T>
Konstruktor który akceptujeIEnumerable<T>
:źródło
Wolę to, ponieważ zapobiega pojedynczej liście pozycji z pustym elementem, jeśli ciąg źródłowy jest pusty:
źródło
Podziel ciąg rozdzielany znakami i zwróć wszystkie niepuste elementy.
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8
źródło
wynik:
źródło
Jeśli masz już listę i chcesz dodać wartości z ciągu rozdzielanego, możesz użyć
AddRange
lubInsertRange
. Na przykład:źródło
Użyj pakietu NuGet Stringify.Library
źródło