ForEach is not mutable, no cambia la estructura de datos de ninguna manera.
Puede:
- manija del bucle mismo, con un índice
- producir una nueva lista, utilizando .Elija y .ToList (siempre que estés utilizando .NET 3.5)
Ejemplo de # 1:
for (Int32 index = 0; index < myList.Count; index++)
if (myList[index].Trim().Length == 0)
myList[index] = "0.0";
Con .NET 3.5 y Linq:
myList = (from a in myList
select (a.Trim().Length == 0) ? "0.0" : a).ToList();
Con .NET 3.5, no se utiliza la sintaxis de LINQ, pero utilizando el código de LINQ:
myList = myList.Select(a => (a.Trim().Length == 0) ? "0.0" : a).ToList();
Editar: Si se quiere producir una nueva lista de dobles, también se puede hacer eso en una sola vez usando LINQ:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0" : a) into d
select Double.Parse(d)).ToList();
Tenga en cuenta que el uso de "0.0" en lugar de sólo "0" se basa en la coma decimal es el punto final c haracter. En mi sistema no lo es, así que lo reemplazó con sólo "0", pero de una manera más apropiada sería cambiar la llamada a Double.Parse tomar un formato numérico explícito, como esto:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0.0" : a) into d
select Double.Parse(d, CultureInfo.InvariantCulture)).ToList();
le recomiendo que visite www.lambdaexpression.net – Delashmate