Просто быстрый вопрос.

У меня есть список коллекции = Дэвид, Боб, Тед

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

Вывод: Дэвид, Боб, Тед

Однако, когда я пытаюсь обрезать "," для последнего значения

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

Это все еще появляется, когда я управляю этим. Я делаю что-то не так?

1
Freddy. 3 Май 2019 в 11:54

4 ответа

Лучший ответ

Строки являются неизменными, вы всегда создаете копию с изменением, и вы не используете свои новые копии, вы не видите изменения. Чтобы исправить это, используйте вашу копию строки:

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

Или измените сам строитель строк перед вызовом ToString():

sb.Length--;
var result = sb.ToString();
1
Rafal 3 Май 2019 в 08:57

Как я уже упоминал в моем комментарии, вам нужно записать обрезанную строку обратно в переменную:

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

Но StringBuilder не является подходящим инструментом для разделения элементов вашей коллекции с ,.

string.Join Кажется, гораздо лучше подходит для этой задачи:

var output = string.Join(",", collection);
4
Tobias Tengler 3 Май 2019 в 09:07

Вам нужно напечатать обрезанный результат, попробуйте это;

foreach (var value in collection)
{
    sb.Append(value);
    sb.Append(",");
}
var result = sb.ToString().TrimEnd(',');
Console.WriteLine(result);
1
ilkerkaran 3 Май 2019 в 08:58

Другая возможность - удалить последние N символов, в данном случае 1:

var result = sb.ToString().Substring(0, sb.ToString().Length - 1);
0
tonycarrbcn 3 Май 2019 в 10:02