如何将一个字符串中的对象使用分号连接起来?

3

我有一个列表,遍历方式如下:

foreach (var obj in mylist)
{
    return += obj.Value.ToString() + ";";
}

这好像不起作用。我需要一个 StringBuilder 吗?

2个回答

5

你可以使用string.Join方法。

将指定数组的元素或集合的成员使用指定的分隔符连接起来。

还可以使用Enumerable.Select方法。

将序列的每个元素投射到新形式上。

return string.Join(";", mylist.Select(x => x.Value));

4

你的解决方案无法正常工作,因为你正在将字符串与C#中的关键字return拼接。

使用StringBuilder初始化,并用分号将值附加到其中。

例如:

StringBuilder sb = new StringBuilder();
foreach (var obj in mylist)
{
    sb.AppendFormat("{0};", obj.Value);
}

return sb.ToString();

优雅的方法是使用string.Join(),您需要传递一个带有IEnumerable参数的字符串,@TheGeneral提供了使用string.Join()的解决方案,即:
var result = string.Join(";", mylist.Select(x => x.Value));

; 是你的分隔符,mylist.Select() 将返回 IEnumerable 的值,这将返回与你的第一种方法相同的结果。


2
还有 sb.AppendFormat("{0};", obj.Value); - Jimi
@Jimi,感谢您的建议。我之前不知道StringBuilder类有这个功能。我已经更新了我的答案。每天都是学校的一天 ;) - Prasad Telkikar
@Siegfried.V,如果您检查我的代码,您会发现我使用了格式化字符串和 ;,即 {0};。OP 希望在每个 obj.Value 后面加上 ;,因此我使用了 StringBuilderAppendFormat() 函数来代替使用 + 连接 obj.Value;。这样可以更清晰地进行字符串连接。 - Prasad Telkikar
1
@Siegfried.V,关于你的第二点,如果我们考虑myStringstring类型,那么字符串是不可变的,每次都会创建一个新的字符串实例,如果迭代100次,则会分配100次内存。为了避免这种情况,我使用了StringBuilder,你可以阅读有关C#中字符串与StringBuilder的文章,这将让你更深入地了解为什么我没有使用myString+=separator+obj.Value - Prasad Telkikar
1
@Prasad Telkikar,我建议迭代一百万次。这可以给你一个非常好的想法,为什么要使用StringBuilder而不是字符串连接(它们都留在泥淖中等待垃圾回收)。 - Jimi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接