Просто быстрый вопрос.
у меня есть список коллекция = Дэвид, Боб, Тед
foreach (var value in collection)
{
sb.Append(value);
sb.Append(",");
}
sb.ToString().TrimEnd(',');
Выход: Дэвид, Боб, Тед,
Однако, когда я пытаюсь обрезать "," для последнего значения
sb.ToString().TrimEnd(',');
Он все еще появляется, когда я запускаю его. Я делаю что-то не так?
@TobiasTengler ах, я вижу, поэтому я не могу изменить существующую переменную, она должна быть в новой переменной, чтобы что-то изменить. Есть смысл спасибо
Хотя это решает вашу проблему. Проверьте мой ответ, чтобы узнать, как лучше пополнить свою коллекцию с помощью ,.





Строки неизменяемы, вы всегда создаете копию с изменением, и вы не используете свою новую копию, если вы не видите изменения. Чтобы исправить это, используйте свою копию строки:
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);
Вам нужно записать обрезанную строку обратно в переменную. Он не изменяет исходную строку, он возвращает новую после того, как она была обрезана.