有没有一种简单的方法可以为 IEnumerable 的每个成员添加前缀或后缀?除了(其中输入是 IEnumerable)之外,我想不出其他方法:
var sb = new StringBuilder();
foreach (var str in inputs) {
str = sb.Append(prefix).Append(str).ToString();
sb.clear();
}
但这不会让我分配回 str...而且我觉得应该有更好的方法来做到这一点。
这应该有效:
var result = inputs
.Select(x => prefix + x)
.ToList();
它只是为每个 input 创建一个新字符串,并在 prefix 前面加上它们,然后将它们放入列表中。对于 suffix,只需将
prefix + x
更改为 x + suffix
。
值得一提的是您的代码中的两个错误:
str
变量在 foreach 循环中应该是只读的,并且您不能分配给它,因为字符串是不可变的,当您调用 sb.Append(prefix).Append(str).ToString();
时,它会创建一个新字符串;StringBuilder
来完成此类任务,因为当您对一个字符串进行多次串联时,它会非常高效。在您的情况下,您有多个字符串,每个字符串仅需要与某个变量连接一次。字符串是不可变的,因此您不能随时修改它们。不过,您可以返回一个new列表:
IEnumerable<String> AppendString (IEnumerable<String> src, String append)
{
foreach (String str in src)
yield return str + append;
}