ForEach не является изменяемым, он никак не меняет структуру данных.
Вы можете либо:
- Обрабатывайте цикл самостоятельно, с индексом
- Создать новый список, используя .Select и .ToList (при условии, что вы используете .NET 3.5)
Пример # 1:
for (Int32 index = 0; index < myList.Count; index++)
if (myList[index].Trim().Length == 0)
myList[index] = "0.0";
С .NET 3.5 и Linq:
myList = (from a in myList
select (a.Trim().Length == 0) ? "0.0" : a).ToList();
В .NET 3.5 не с использованием синтаксиса Linq, а с использованием кода Linq:
myList = myList.Select(a => (a.Trim().Length == 0) ? "0.0" : a).ToList();
Редактировать : Если вы хотите создать новый список парных чисел, вы также можете сделать это за один раз, используя Linq:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0" : a) into d
select Double.Parse(d)).ToList();
Обратите внимание, что при использовании «0.0» вместо просто «0» десятичная точка является символом полной остановки. В моей системе это не так, поэтому я заменил его на «0», но более подходящим способом было бы изменить вызов на Double.Parse для получения явного числового форматирования, например:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0.0" : a) into d
select Double.Parse(d, CultureInfo.InvariantCulture)).ToList();