在一行中将字符串转换为List <string>?


101

我有一个字符串:

var names = "Brian,Joe,Chris";

有没有一种方法可以将其转换为以行List<string>分隔的定界符,


15
我不了解“一行”的要求。努力编写清晰易懂的代码,而不是将操作尽可能缩小的空间。
Ed S.

6
随着LINQ的出现,在C#IMO中,可读且干净的“单一衬里”已变得越来越普遍。
马特·格里尔

5
@Ed S.-尽管我同意“单行”可能不是最好的表达方式,但像Matt Matter所提供的那样,单行语句往往非常清晰易懂。我的猜测是他只是想避免使用for循环,这更乏味,容易出错且不清楚。
StriplingWarrior

4
我并不是说单线本质上更难理解,我只是说这永远都不是必需的。只要做到最好就可以了。如果碰巧是一行,那很好,但这不是应该影响编写代码的方式。
Ed S.

Answers:


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

甚至更像Dan的建议:

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

11
您可能是故意放在那里的,但我总是忽略整个new char[] { }部分。这样至少对我来说更具可读性。
丹涛

4
@Dan:我同意,通常我会使用params重载。但是对于一个问题的答案,有时候我觉得冗长会更好。真的只是意见问题。
马特·格里尔

2
ToList()似乎不再可用了?
吉娜·马拉诺

10
您是否引入了System.LINQ名称空间?
马特·格里尔


3

我更喜欢这样做,因为如果您的源字符串为空,它可以防止单个项目列表中包含一个空项目:

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



0

如果您已经有一个列表,并且想从定界字符串中添加值,则可以使用AddRangeInsertRange。例如:

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

0

使用Stringify.Library nuget包

//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 = ';' });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.