Stringbuilder TrimEnd()为什么不删除我的字符?

时间:2019-05-03 08:54:09

标签: c# stringbuilder

一个简单的问题。

我有一个清单 集合= David,Bob,Ted

foreach (var value in collection)
{
    sb.Append(value);
    sb.Append(",");
}
sb.ToString().TrimEnd(',');

输出:David,Bob,Ted,

但是,当我尝试修剪“,”作为最后一个值

sb.ToString().TrimEnd(',');

当我运行它时它仍然出现。我做错什么了吗?

4 个答案:

答案 0 :(得分:3)

正如我在评论中提到的那样,您需要将修剪后的字符串写回到变量中:

var output = sb.ToString().TrimEnd(',');

但是,StringBuilder似乎不是用,分隔收集项的正确工具。

string.Join似乎更适合该任务:

var output = string.Join(",", collection);

答案 1 :(得分:1)

字符串是不可变的,您始终在创建具有更改的副本,并且没有使用新副本,则看不到更改。要解决此问题,请使用字符串副本:

var result = sb.ToString().TrimEnd(',');

或在调用ToString()之前修改字符串生成器本身:

sb.Length--;
var result = sb.ToString();

答案 2 :(得分:1)

您需要打印修剪后的结果,请尝试此操作;

foreach (var value in collection)
{
    sb.Append(value);
    sb.Append(",");
}
var result = sb.ToString().TrimEnd(',');
Console.WriteLine(result);

答案 3 :(得分:0)

另一种可能性是删除最后N个字符,在这种情况下为1:

var result = sb.ToString().Substring(0, sb.ToString().Length - 1);