将返回字符分隔的字符串转换为List 的最佳方法是什么?

我需要经常将“字符串块” (包含返回字符的字符串,例如从文件或TextBox) 转换为List

比下面的ConvertBlockToLines方法更优雅的方法是什么?

 using System; using System.Collections.Generic; using System.Linq; namespace TestConvert9922 { class Program { static void Main(string[] args) { string testBlock = "line one" + Environment.NewLine + "line two" + Environment.NewLine + "line three" + Environment.NewLine + "line four" + Environment.NewLine + "line five"; List lines = StringHelpers.ConvertBlockToLines(testBlock); lines.ForEach(l => Console.WriteLine(l)); Console.ReadLine(); } } public static class StringHelpers { public static List ConvertBlockToLines(this string block) { string fixedBlock = block.Replace(Environment.NewLine, "§"); List lines = fixedBlock.Split('§').ToList(); lines.ForEach(s => s = s.Trim()); return lines; } } } 

 List newStr = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList(); 

这会将连续的换行符保持为空字符串(请参阅StringSplitOptions )

无需转换为您的特殊标志:

 List strings = str.Split(new string[] {Environment.NewLine}, StringSplitOptions.None).ToList(); strings.ForEach(s => s = s.Trim()); 

您是否尝试拆分换行/回车并使用IEnumerable ToList扩展?

 testBlock.Split( new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries ) .ToList() 

如果你想保留空行,但可能同时包含换行符和回车符。

 textBlock.Replace( "\r\n", "\n" ).Replace( "\r", "\n" ).Split( '\n' ).ToList(); 

嗯。 你知道string现在有一个带string[]数组的.Split(),对吧?

所以……

 string[] lines = data.Split( new string[1]{ Environment.NewLine }, StringSplitOptions.None ); 

您可以使用RegEx.Split直接使用Enviroment.NewLine进行拆分。

 public static List ConvertBlockToLines(this string block) { return Regex.Split(block, Environment.NewLine).ToList(); } 

LINQ!

 var linesEnum = testBlock.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).AsEnumerable(); List lines = linesEnum.ToList();