【问题标题】:Building a string from List<string> in C#在 C# 中从 List<string> 构建字符串
【发布时间】:2011-02-16 14:00:39
【问题描述】:

List&lt;string&gt; 有 ("ABC","","DEF","","XYZ"),如何从 C# 的列表中获取字符串 "ABC::DEF::XYZ"?

添加

List<string> strings = new List<string> {"ABC","","DEF","","XYZ"};
string joined = string.Join("::", strings.ToArray());
Console.WriteLine(joined);

给出ABC::::DEF::::XYZ,而不是ABC::DEF::XYZ,如何跳过列表中的空字符串(“”)?

【问题讨论】:

  • 上帝帮助一所大学的毕业生,其中这个问题是家庭作业。
  • 您真的想要用双冒号分隔的有效字符串还是用单冒号分隔的所有字符串?您的输出示例可能是。在我看来,如果它是由单个冒号分隔的所有字符串,则重组列表更有用——这样你就可以取回空字符串。

标签: c# list


【解决方案1】:

你可以这样做:

List<string> strings = ...
string joined = string.Join(":", strings.ToArray());

在 .NET 4.0 中,您可以省略 ToArray() 调用。

编辑:根据您的更新表明您希望 跳过 空字符串并使用 两个 冒号作为分隔符,您可以这样做:

// Use !string.IsNullOrEmpty or !string.IsNullOrWhiteSpace if more appropriate.   
string[] filtered = list.Where(s => s != string.Empty) 
                        .ToArray();

string joined = string.Join("::", filtered);

【讨论】:

    【解决方案2】:
    string result = string.Join("::", list.Where(s => !string.IsNullOrEmpty(s)).ToArray());
    

    【讨论】:

    • @tvanfosson - 没看到那些;编辑。我想知道问题是否在发布后被编辑,因为其他一些回答者似乎也没有考虑到这些问题。
    【解决方案3】:
    string.Join("::", strings.Where(item=>!string.IsNullOrEmpty(item)).ToArray()); 
    

    【讨论】:

      【解决方案4】:

      string.Join( ":", list ) 在 .NET 4.0 中。如果您使用的是 3.5 或更早版本,string.Join( ":", list.ToArray() )

      【讨论】:

      • “或更早”并不真正适用,因为依赖于 3.5 中出现的 Enumerable.ToArray 方法。
      • @Ani - 只要通用集合存在,List&lt;T&gt; 的签名中就有 ToArray 方法。所以只要你不使用 .NET 1.1,你应该没问题。
      【解决方案5】:

      你应该看看String.Join(),例如String.Join(":",list.ToArray());

      【讨论】:

        【解决方案6】:

        string.JoinToArray 一起使用会起作用。

        作为Ani said,如果您使用.NET 4.0,则可以省略ToArray

        如果您不是在 .NET 4.0 上,但您不希望 ToArray 调用的开销,您可以编写一个方法来创建 StringBuilder,将每个项目附加到List&lt;string&gt; 加上你的分​​隔符(跳过最后一项之后的分隔符),并在最后返回 ToString 的结果。

        【讨论】:

        • 有趣的想法 - 你认为ToArray 的开销是否比StringBuilder 然后遍历集合的开销更重要?
        【解决方案7】:

        我想你可以看看The suggested method

        发布这个你可以简单地做string.Join(",", strings.ToArray())

        (用 :: 替换空字符串)

        【讨论】:

          猜你喜欢
          • 2015-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-23
          • 1970-01-01
          • 2012-04-06
          • 2012-12-17
          • 2016-06-20
          相关资源
          最近更新 更多