【问题标题】:Add prefix/suffix to each member of an IEnumerable<string> in C#在 C# 中为 IEnumerable<string> 的每个成员添加前缀/后缀
【发布时间】:2014-05-31 00:31:48
【问题描述】:

是否有一种简单的方法可以为 IEnumerable 的每个成员添加前缀或后缀?除了(输入是 IEnumerable 的地方)之外,我想不出办法:

var sb = new StringBuilder();
foreach (var str in inputs) {
    str = sb.Append(prefix).Append(str).ToString();
    sb.clear();
}

但这不会让我分配回 str...而且我觉得应该有更好的方法来做到这一点。

【问题讨论】:

    标签: c# string ienumerable prefix


    【解决方案1】:

    这应该可行:

    var result = inputs
                 .Select(x => prefix + x)
                 .ToList();
    

    它只是为每个 input 创建一个新的字符串,在 prefix 之前添加,然后将它们放入一个列表中。对于 suffix 只需更改 @987654322 @到x + suffix

    【讨论】:

    • 谢谢!效果很好,我不知道为什么我没有看到,一天太长了......
    【解决方案2】:

    值得一提的是您的代码有两个错误:

    1. 您的 str 变量在 foreach 循环中应该是只读的,并且您不能分配给它,因为字符串是不可变的,当您调用 sb.Append(prefix).Append(str).ToString(); 时,它会创建一个新字符串;
    2. 这种任务不需要StringBuilder,因为当你对一个字符串进行多次连接时它很有效。在您的情况下,您有几个字符串,每个字符串只需要与某个变量连接一次。

    【讨论】:

      【解决方案3】:

      字符串是不可变的,因此您不能随时修改它们。你可以返回一个新的列表:

      IEnumberable<String> AppendString (IEnumerable<String> src, String append)
      {
         foreach (String str in src)
            yield return str + append;
      }
      

      【讨论】:

      • 可以随时添加。你只需要分配结果。
      • @SimonC,我认为很明显我的意思是“就地”添加(修改原始字符串),所以你需要返回一个新列表。我进行了编辑以尝试使这一点更清楚,请让我知道您的想法。很抱歉造成混乱。
      猜你喜欢
      • 2016-03-07
      • 2018-07-12
      • 2019-05-30
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      相关资源
      最近更新 更多