Я получаю много информации в списке, связанном с базой данных, и я хочу создать строку групп для того, кто подключен к веб-сайту.
Я использую это для тестирования, но это не динамично, так что это действительно плохо:
string strgroupids = "6";
Я хочу использовать это сейчас. Но возвращаемая строка что-то вроде1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Я хочу удалить ,
после, 5
но это определенно не работает.
strgroupids = strgroupids.TrimEnd(new char[] { ',' });
но есть лучшие идеи ниже.Ответы:
MSDN:
источник
Как насчет этого
Много чище.
Он будет добавлять все элементы внутри
groupIds
с','
между собой, но это не будет поставить','
в конце.источник
Строки в C # являются неизменяемыми. Когда в вашем коде вы
strgroupids.TrimEnd(',');
или строка не изменяется .strgroupids.TrimEnd(new char[] { ',' });
strgroupids
Вам нужно сделать что-то вроде
strgroupids = strgroupids.TrimEnd(',');
этого.Цитировать здесь :
источник
Добавьте метод расширения.
затем используйте:
источник
int n
число символов, которое нужно удалить в конце. Во-вторых, вы проверяете на нулевую длину, но это не устраняет все возможные исключения.int index = ..LastIndexOf..
Тогда было бы лучше сделатьif (index >= 0)
.string character
плохо назван. В-четвертых, для будущих программистов не сразу очевидно, что это удаляет символы в конце строки. Ой, подождите, это не обязательно так. Он ищет строку. Это может быть удаление где-то посередине. Теперь программист по техническому обслуживанию должен изучить все способы использования метода, чтобы увидеть, что пыталось достичь. Не очень хороший метод для вызова, для этой простой необходимости удаления из конца строки. Извините за всю критику; Я делаю это для тех, кто принимает этот метод, чтобы они поняли.String.TrimEnd
было бы более целесообразно использовать. Но подождите, это уже существует - и было упомянуто в первоначальном вопросе и нескольких других ответах 3 года назад - не нужно изобретать новый метод! В чем выгода вашего подхода?Удаляет все запятые:
Это наоборот, хотя вы написали код, который в первую очередь добавляет запятую. Вы должны использовать
string.Join(",",g)
вместо этого, предполагая, чтоg
этоstring[]
. Дайте ему лучшее имя, чемg
тоже!источник
В качестве альтернативы добавлению запятой для каждого элемента вы можете просто использовать String.Join:
Это добавит разделитель (в данном случае ",") между каждым элементом в массиве.
источник
Обратите внимание, что использование
ForEach
здесь обычно считается «неправильным» (прочитайте, например, http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx )Используя некоторые LINQ:
Без подстрок:
источник
string.Join
идеально подходит, если у вас есть массив строк в качестве источника ИЛИ у вас есть C # 4.0Дополнительно к решению sll: лучше обрезать строку, если в конце есть несколько пробелов.
источник
string.Join
лучше, но если вы действительно хотите LINQForEach
:Некоторые заметки:
string.Join
иforeach
оба лучше, чем этот, гораздо медленнее, подход,
так как он никогда не добавляется+=
) удобен для добавления в строки.ToString()
не требуется, так как вызывается автоматически при конкатенации не-строкStringBuilder
следует рассматривать вместо объединения строкисточник
if(strgroupids != string.Empty){
ForEach
;foreach (var g in groupIds) {
работает так же хорошо :)