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

Stringbuilder TrimEnd() why is it not removing my char?

只是一个简单的问题。

我有一个清单 集合 = 大卫、鲍勃、泰德

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

输出:David, Bob, Ted,

然而,当我尝试 trim 关闭 "," 作为最后一个值时

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

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

字符串是不可变的,你总是在创建一个有变化的副本,而你没有使用你的新副本母鸡你看不到变化。要修复它,请使用您的字符串副本:

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

或在调用 ToString():

之前修改字符串生成器本身
sb.Length--;
var result = sb.ToString();

您需要打印修剪后的结果,试试这个;

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

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

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

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

string.Join 似乎更适合这项任务:

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

另一种可能性是删除最后 N 个字符,在本例中为 1 :

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