2010-08-20 7 views
12

Я пытаюсь следующийКак можно обрезать все элементы в списке?

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()); 

Но это не работает, теги всегда возвращаются как «ааа», «БББ».

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

ответ

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

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

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

Это не будет работать так, как он хочет. Проблема в том, что между dddd и eeeee нет запятой. –

+5

@Justin: Где OP говорит, что это проблема? Насколько я могу судить, в списке должно быть четыре элемента: * «aaa» *, * «bbb» *, * «ccc» * и * «dddd eeeee» *. – LukeH

+0

Я вроде как понял. И ты прав. Я слишком много читал и делал предположение. –

1

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

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

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

просто не забудьте отфильтровать все пустые элементы после разделения по пробелу: tl.Split (''). Выберите (s => s.Replace (",", ""). Trim()). =>! string.IsNullOrEmpty (s)). ToArray() – theburningmonk

5

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

4

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

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

Смежные вопросы