Преобразовать строку в List <string> в одну строку?

104

У меня есть строка:

var names = "Brian,Joe,Chris";

Есть ли способ преобразовать это в List<string>разделитель ,в одну строку?

Брайан Дэвид Берман
источник
15
Я не понимаю требования "в одну строку". Стремитесь писать ясный и понятный код, а не способы уместить операцию на как можно меньшем пространстве.
Эд С.
6
С появлением LINQ «однострочные», читаемые и чистые, стали гораздо более распространенными в C # IMO.
Мэтт Грир
5
@Ed S. - Хотя я согласен с тем, что выражение «в одну строку» может быть не лучшим способом выразить это, однострочные утверждения, подобные тому, что предлагает Мэтт Грир, как правило, очень четкие и понятные. Я предполагаю, что он просто хочет избежать использования forцикла, который более утомителен, подвержен ошибкам и неясен.
StriplingWarrior
4
Я не хочу сказать, что однострочники труднее понять, я просто говорю, что это никогда не должно быть требованием. Просто сделайте это наилучшим из возможных способов. Если это окажется в одной строке, отлично, но это не то, что должно определять способ написания кода.
Эд С.

Ответы:

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

Или даже чище по предложению Дэна:

List<string> result = names.Split(',').ToList();
Мэтт Грир
источник
11
Возможно, вы поместили его туда специально, но я всегда опускаю всю new char[] { }часть. Это более читабельно, по крайней мере , для меня .
Дэн Тао
4
@Dan: Я согласен, и обычно я использую перегрузку params. Но для ответа на вопрос иногда мне кажется, что многословие лучше. Просто вопрос мнения.
Мэтт Грир
3
ToList () больше не работает?
Джина Марано
11
Вы ввели 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>();
Король Гипокритов
источник
1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

вывод:

Welcome

To 

Programming
Магхалакшми Саравана
источник
0

Если у вас уже есть список и вы хотите добавить значения из строки с разделителями, вы можете использовать AddRangeили InsertRange. Например:

existingList.AddRange(names.Split(','));
c32hedge
источник
0

Используйте пакет 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 = ';' });
Митхун Башак
источник