在 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> 时,指定的强制转换无效