Các câu trả lời khác đã giải thích tại sao mã hiện tại của bạn không hoạt động. Dưới đây là một phương pháp mở rộng mà sẽ sửa chữa nó:
// Must be in a static non-nested class
public static void ModifyEach<T>(this IList<T> source,
Func<T,T> projection)
{
for (int i = 0; i < source.Count; i++)
{
source[i] = projection(source[i]);
}
}
Sau đó sử dụng như thế này:
newsplit.ModifyEach(x => "WW");
Điều đó sẽ làm việc với bất kỳ thực hiện IList<T>
như mảng và List<T>
. Nếu bạn cần nó để làm việc với một tùy ý IEnumerable<T>
sau đó bạn đã có một vấn đề, như trình tự chính nó có thể không được mutable.
Sử dụng Select()
là một cách tiếp cận chức năng hơn tất nhiên, nhưng đôi khi biến đổi một bộ sưu tập hiện có là giá trị thực hiện ...
Nguồn
2009-07-21 16:37:03
Là một mảng chuỗi hoặc trong trường hợp của tôi một danh sách IEnumerable như tôi không nghĩ rằng nó là gì? –
Jon
@Jon: mảng và Danh sách tất cả hỗ trợ giao diện IEnumerable –
Tôi không nghĩ rằng Select() là những gì Jon muốn, có vẻ như anh ta muốn sửa đổi chính IEnumerable. Chọn sẽ chỉ cung cấp cho anh ta những mục đã có "WW" – AgileJon