Подтвердить что ты не робот

Как я могу обрезать все элементы в списке?

Я пытаюсь сделать следующее

string tl = " aaa, bbb, ccc, dddd             eeeee";

var tags = new List<string>();
tags.AddRange(tl.Split(','));
tags.ForEach(x => x = x.Trim().TrimStart().TrimEnd());

var result = String.Join(",", tags.ToArray());

Но это не сработает, теги всегда возвращаются как "aaa", "bbb".

Как я могу обрезать все элементы в списке?

4b9b3361

Ответ 1

// you can omit the final ToArray call if you're using .NET 4
var result = string.Join(",", tl.Split(',').Select(s => s.Trim()).ToArray());

Если вам нужна только конечная строка результата, а не промежуточная коллекция, вы можете использовать регулярное выражение для упорядочивания строки. Вам нужно будет проверить, действительно ли регулярное выражение превосходит метод сплит-подстроки:

var result = Regex.Replace(tl, @"(?<=^|,) +| +(?=,|$)", "");

Ответ 2

Причина, по которой ваш подход не работает, заключается в том, что x является копией текущей строковой ссылки, обрабатываемой в вызове ForEach (т.е. локальным для делегата). Поэтому присваивание не влияет на элемент, указанный в списке.

Ответ 3

Что происходит, так это то, что вы пытаетесь модифицировать коллекцию с помощью оператора foreach, который является no-no. Коллекции не могут быть изменены с помощью foreach.

Вам нужно модифицировать цикл for, или, используя lambdas, вы можете использовать решение LukeH.

Ответ 4

Ваша проблема в том, что между dddd и eeeee нет запятой. Если вы хотите, чтобы они были отдельными, вам нужно разделить на ' ', разбить запятые, а затем обрезать лишние пробелы.

string tl = " aaa, bbb, ccc, dddd                eeeee";

var result = t1.Split(' ').Where(s => !String.IsNullOrEmpty())
                          .Select(s => s.Replace(',','').Trim())
                          .ToArray();