在 C# 中为 IEnumerable<string> 的每个成员添加前缀/后缀

问题描述 投票:0回答:3

有没有一种简单的方法可以为 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
3个回答
12
投票

这应该有效:

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

它只是为每个 input 创建一个新字符串,并在 prefix 前面加上它们,然后将它们放入列表中。对于 suffix,只需将

prefix + x
更改为
x + suffix


2
投票

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

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

0
投票

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

IEnumerable<String> AppendString (IEnumerable<String> src, String append)
{
   foreach (String str in src)
      yield return str + append;
}
© www.soinside.com 2019 - 2024. All rights reserved.