Quiero recortar cualquier espacio en blanco de una colección de cadenas. Usé el siguiente código pero parece que no funciona. ¿Alguien podría explicar por qué?No entiendo por qué el comando ForEach no funciona
result.ForEach(f => f = f.Trim());
Quiero recortar cualquier espacio en blanco de una colección de cadenas. Usé el siguiente código pero parece que no funciona. ¿Alguien podría explicar por qué?No entiendo por qué el comando ForEach no funciona
result.ForEach(f => f = f.Trim());
Esto no va a funcionar porque está asignando una nueva cadena de referencia a una variable local. Esto es probablemente lo que busca:
result = result.Select(f => f.Trim()).ToList();
Gracias - Me puso en el camino correcto, pero lo hice de la siguiente manera ... result = result.ConvertAll (f => f.Trim()); –
@Mark - Eso debería ser un poco más eficiente. Por supuesto, sacrificas la versatilidad de 'Seleccionar' pero si necesitas una' Lista
Está reasignando la variable de argumento dentro del alcance de la lambda. Es una forma contraída de:
foreach(string value in myList)
{
Lambda(value);
}
void Lambda(string input)
{
input = input.Trim();
}
La forma más simple, probablemente sería usar una proyección:
myList = myList.Select(str => str.Trim()).ToList();
Gracias Rex - ¿Hay alguna manera de lograr lo que quiero y seguir usando la expresión lamda? –
Gracias por la ayuda - Te di +1 –
foreach
no da acceso de escritura a la colección subyacente, sólo se itera a través de ella, lo que significa que su cambio no se almacena de nuevo en la colección.
Puede hacer dos cosas:
producir una nueva colección
var newResult = result.Select(f => f.Trim()).ToList();
uso normal de bucle y cambiar la colección original
for (int index = 0; index < result.Count; index++)
result[index] = result[index].Trim();
similares (pero para Java): http://stackoverflow.com/questions/48 51663/iteration-of-liststring-with-modyfing-string – finnw
Solo use "ForEach" y "foreach" para * read * de una lista; como has descubierto, no funciona bien * escribir * en una lista. Como solución alternativa, ¿podría recortar la cadena * antes * de entrar en la lista? Entonces ni siquiera necesita hacer esta operación. –