【问题标题】:Convert string to List<string> in one line?在一行中将字符串转换为 List<string>?
【发布时间】:2011-02-16 01:08:52
【问题描述】:

我有一个字符串:

var names = "Brian,Joe,Chris";

有没有办法将其转换为由, 在一行中分隔的List&lt;string&gt;

【问题讨论】:

  • 我不明白“一行”的要求。争取编写清晰易懂的代码,而不是尽可能将操作放入尽可能小的空间。
  • 随着 LINQ 的出现,可读且干净的“单行”在 C# IMO 中变得越来越普遍。
  • @Ed S. - 虽然我同意“在一行中”可能不是最好的表达方式,但像 Matt Greer 提供的单行语句往往非常清晰易懂。我的猜测是他只是想避免使用for 循环,这更乏味、容易出错且不清楚。
  • 我并不是说单行字本来就更难理解,我只是说它不应该成为一个要求。只要做到最好的方式。如果恰好在一行中,那很好,但它不应该影响您编写代码的方式。

标签: c# asp.net list generics string


【解决方案1】:
List<string> result = names.Split(new char[] { ',' }).ToList();

根据 Dan 的建议,甚至更清洁:

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

【讨论】:

  • 你可能故意把它放在那里,但我总是忽略整个new char[] { } 部分。至少对来说,这样更易​​读。
  • @Dan:我同意,通常我确实使用 params 重载。但是对于一个问题的答案,有时我觉得冗长更好。真的只是意见问题。
  • ToList() 似乎不再有用了?
  • 你是否引入了System.LINQ命名空间?
【解决方案2】:

List&lt;T&gt; 有一个接受 IEnumerable&lt;T&gt; 的构造函数:

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

【讨论】:

  • 优秀 - 无需导入 System.Linq
【解决方案3】:

我更喜欢这个,因为如果您的源字符串为空,它会阻止包含空项目的单个项目列表:

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

【讨论】:

    【解决方案4】:

    使用 Split() 函数对它们进行切片,并使用 ToList() 将它们作为列表返回。

    var names = "Brian,Joe,Chris";
    List<string> nameList = names.Split(',').ToList();
    

    【讨论】:

    • thanks.it 帮助了我 +1
    【解决方案5】:

    拆分由字符分隔的字符串并返回所有非空元素。

    var names = ",Brian,Joe,Chris,,,";
    var charSeparator = ",";
    var result = names.Split(charSeparator, StringSplitOptions.RemoveEmptyEntries);
    

    https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:
        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
        

        【讨论】:

          【解决方案8】:

          使用 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 = ';' });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-29
            • 1970-01-01
            • 2014-01-19
            • 2011-09-08
            相关资源
            最近更新 更多