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

Posted

技术标签:

【中文标题】在 C# 中为 IEnumerable<string> 的每个成员添加前缀/后缀【英文标题】:Add prefix/suffix to each member of an IEnumerable<string> in C# 【发布时间】: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...而且我觉得应该有更好的方法来做到这一点。

【问题讨论】:

【参考方案1】:

这应该可行:

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

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

【讨论】:

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

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

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

【讨论】:

【参考方案3】:

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

IEnumberable<String> AppendString (IEnumerable<String> src, String append)

   foreach (String str in src)
      yield return str + append;

【讨论】:

可以随时添加。你只需要分配结果。 @SimonC,我认为很明显我的意思是“就地”添加(修改原始字符串),所以你需要返回一个新列表。我进行了编辑以尝试使这一点更清楚,请让我知道您的想法。很抱歉造成混乱。

以上是关于在 C# 中为 IEnumerable<string> 的每个成员添加前缀/后缀的主要内容,如果未能解决你的问题,请参考以下文章

C# LINQ 优雅地将 IEnumerable<IGrouping> 转换为 IEnumerable<IEnumerable>?

IEnumerable<T> 使用 c# 在函数内访问 T 的属性

尝试在 C# 中迭代​​ IEnumerable<int> 时,指定的强制转换无效

在 C# 中将 List<IEnumerable<int>> 转换为 List<int> [重复]

c# IEnumerable<T>

在 C# 中的列表上使用 IEnumerable [重复]