Pregunta

Probé el siguiente código en LINQPad y obtuve los siguientes resultados:

List<string> listFromSplit = new List<string>("a, b".Split(",".ToCharArray())).Dump();
listFromSplit.ForEach(delegate(string s) 
{ 
  s.Trim(); 
});
listFromSplit.Dump();
  

" a " y " b "

¿entonces la letra b no eliminó el espacio en blanco como esperaba ...?

Alguien tiene alguna idea

[NOTA: el método .Dump () es una extensión menthod en LINQPad que imprime el contenido de cualquier objeto de una forma agradablemente formateada de forma inteligente]

¿Fue útil?

Solución

El método String.Trim () devuelve una cadena que representa la cadena actualizada. No actualiza el objeto de cadena en sí, sino que crea uno nuevo.

Podrías hacer esto:

s = s.Trim();

Sin embargo, no puede actualizar una colección mientras se enumera a través de ella, por lo que querrá completar una nueva Lista mientras enumera sobre la existente o completar la Lista manualmente utilizando la matriz de cadenas devuelta por String.Split.

Llenar una nueva lista:

List<string> temp = new List<string>("a, b".Split(",".ToCharArray()));
List<string> listFromSplit = new List<string>();

temp.ForEach(delegate(string s) 
{ 
    listFromSplit.Add(s.Trim()); 
});

listFromSplit.Dump();

Rellenar manualmente:

string[] temp = "a, b".Split(",".ToCharArray());
List<string> listFromSplit = new List<string>();

foreach (string s in temp)
{
    listFromSplit.Add(s.Trim()); 
};

listFromSplit.Dump();

Otros consejos

solo está creando una cadena recortada, sin asignarle nada.

var s = "  asd   ";
s.Trim();

no actualizará s, mientras que ...

var s = "   asd   ";
s = s.Trim();

will ..

var listFromSplit = "a, b".Split(',').Select(s=>s.Trim());

supongo que sería como lo haría.

Además de la respuesta publicada por Adrian Kuhn puede hacer lo siguiente:

var result = listFromSplit.Select(s => s.Trim());

Las instancias de cadena son inmutables. Todo lo que parece modificar uno crea una nueva instancia en su lugar.

No está asignando el resultado recortado a nada. Este es un error clásico, acabo de abandonar el hábito de cometer este error con la cadena. Reemplazar :)

No tengo IDEA en funcionamiento, pero esto debería hacer el trabajo (a menos que esté equivocado):

var result = from each in listFromSplit select each.Trim();

Divide en espacios y comas y elimina las entradas vacías. Todo bien y recortado. Sin embargo, se supone que sus cadenas no contienen espacios.

List<string> listFromSplit =
     new List<string>( "a , b ".Split( new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries ));

Las opciones linq que otros han proporcionado deberían funcionar bien. Como otra opción, aquí hay un método de extensión que usa un bucle for:

    public static void TrimCollection(this IList<string> stringCollection) {

        for (int i = 0; i <= stringCollection.Count() - 1; i++)
            stringCollection[i] = stringCollection[i].Trim();

    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top