2010-08-20 25 views
12

Estoy tratando los siguientes¿Cómo puedo recortar todos los elementos en una lista?

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

Pero no funciona, las etiquetas siempre regresan como "AAA", "bbb".

¿Cómo puedo recortar todos los elementos de una lista?

Respuesta

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

Si sólo necesita la cadena resultado final, en lugar de la colección intermedia, a continuación, se puede utilizar una expresión regular para poner en orden la cadena. Tendrá que punto de referencia para determinar si es o no la expresión regular supera a la escisión recortado de unirse a la técnica:

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

Esto no va a funcionar de la manera que él quiere. El problema es que no hay coma entre dddd y eeeee. –

+5

@Justin: ¿Dónde dice el OP que esto es un problema? Por lo que yo puedo decir que debería ser de cuatro elementos de la lista: * "AAA" *, * "bbb" *, * "ccc" * y * "dddd eeeee" *. – LukeH

+0

Un poco imaginado. Y tienes razón Leí demasiado e hice una suposición. –

1

Su problema es que no hay una coma entre dddd y eeeee. Si desea que estén separados, debe dividir en ' ', pelar las comas y luego recortar espacios en blanco adicionales.

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

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

sólo recuerda a filtrar todos los elementos vacíos después de dividir por el espacio:. tl.Split (' ') .Elija (. S => s.Replace (" """) Recorte()) Donde (s =>! string.IsNullOrEmpty (s)). ToArray() – theburningmonk

5

La razón por la que su enfoque no funciona es que el x es una copia de la cadena de referencia actual que está siendo procesado en la llamada ForEach (es decir local para el delegado). Por lo tanto, la asignación no afecta al elemento al que se hace referencia en la lista.

4

Lo que está pasando es que usted está tratando de modificar una colección usando una declaración-foreach que es un no-no. Las colecciones no se pueden modificar con foreach.

Necesitarás modificarlo en un bucle for o, usando lambdas, puedes usar la solución de LukeH.

Cuestiones relacionadas