ForEach không thể thay đổi được, nó không thay đổi cấu trúc dữ liệu theo bất kỳ cách nào.
Bạn có thể:
- Xử lý vòng lặp chính mình, với một chỉ số
- Sản xuất một danh sách mới, sử dụng .Chọn và ToList (miễn là bạn đang sử dụng .NET 3.5)
Ví dụ về # 1:
for (Int32 index = 0; index < myList.Count; index++)
if (myList[index].Trim().Length == 0)
myList[index] = "0.0";
Với .NET 3.5 và LINQ:
myList = (from a in myList
select (a.Trim().Length == 0) ? "0.0" : a).ToList();
Với .NET 3.5, không sử dụng LINQ-cú pháp, nhưng sử dụng LINQ-code:
myList = myList.Select(a => (a.Trim().Length == 0) ? "0.0" : a).ToList();
Sửa: Nếu bạn muốn tạo ra một danh sách mới của đôi, bạn cũng có thể làm điều đó trong một lần sử dụng LINQ:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0" : a) into d
select Double.Parse(d)).ToList();
Lưu ý rằng việc sử dụng "0.0" thay vì chỉ "0" dựa vào dấu thập phân là điểm dừng đầy đủ c haracter. Trên hệ thống của tôi không phải vậy, vì vậy tôi đã thay thế nó bằng "0", nhưng cách thích hợp hơn là thay đổi cuộc gọi thành Double.Parse để có định dạng số rõ ràng, như sau:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0.0" : a) into d
select Double.Parse(d, CultureInfo.InvariantCulture)).ToList();
Nguồn
2009-03-24 10:59:23
tôi khuyên bạn đến thăm www.lambdaexpression.net – Delashmate