Перетворити рядок у Список <string> в одному рядку?


101

У мене є рядок:

var names = "Brian,Joe,Chris";

Чи є спосіб перетворити це на List<string>розмежоване ,в одному рядку?


15
Я не розумію вимоги "в один рядок". Знімайте для написання коду, який є зрозумілим і зрозумілим, а не способами, щоб вписати операцію в якомога менший простір.
Ред С.

6
З появою LINQ "читаються та чисті" одні вкладиші стали набагато частішими у C # IMO.
Метт Грір

5
@Ed S. - Хоча я погоджуюся, що "в один рядок" може бути не найкращим способом сказати, однорядкові твердження, як те, що надає Метт Грір, мають тенденцію бути дуже чіткими і зрозумілими. Я здогадуюсь, що він просто хоче уникати використання forциклу, який є більш стомлюючим, схильним до помилок і незрозумілим.
StriplingWarrior

4
Я не хочу сказати, що одноколісні суттєво зрозуміти важче, я просто кажу, що це ніколи не повинно бути вимогою. Просто робіть це найкращим способом. Якщо це трапляється в одному рядку, чудово, але це не те, що має формувати те, як ви пишете свій код.
Ред С.

Відповіді:


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

Або навіть чистіше за пропозицією Дена:

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

11
Ви, можливо, помістили його там, але я завжди залишаю цілу new char[] { }частину. Мені це зручніше читати, принаймні , мені .
Дан Дао

4
@Dan: Я погоджуюся, і, як правило, я використовую перевантаження переходів. Але для відповіді на запитання іноді я відчуваю, що багатослів’я краще. Просто питання справді.
Метт Грір

2
Здається, що ToList () більше не використовується?
Джина Марано

10
Ви ввели в System.LINQпростір імен?
Метт Грір

42

У List<T>конструкторі є який приймає IEnumerable<T>:

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

Відмінно - не потрібно імпортувати System.Linq
VictorySaber

3

Я вважаю за краще це, оскільки він перешкоджає одному списку елементів із порожнім елементом, якщо джерельний рядок порожній:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();



0

Якщо у вас вже є список і хочете додати значення з розмежованого рядка, ви можете використовувати AddRangeабо InsertRange. Наприклад:

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

0

Скористайтеся пакетом нульових цілей 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 = ';' });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.