2009-06-04 22 views

Trả lời

4

Đây không phải là gần như rõ ràng như những cách khác, nhưng nó sẽ làm việc tốt:

dictionary.Keys.ToList().ForEach(i => dictionary[i] = 0); 

thay thế khác của tôi sẽ có được để thực hiện một phương pháp khuyến nông ForEach tương tự như sau:

public static class MyExtensions 
{ 
    public static void ForEach<T>(this IEnumerable<T> items, Action<T> action) 
    { 
     foreach (var item in items) 
     { 
      action(item); 
     } 
    } 
} 

Sau đó, sử dụng nó như sau:

dictionary.ForEach(kvp => kvp.Value = 0); 

Điều này sẽ không hoạt động trong trường hợp này, vì Giá trị không thể làm như đã ký vào.

+0

Vì vậy, về cơ bản, tôi sẽ không bao giờ sử dụng đoạn mã đầu tiên trong thực tế. Phương pháp mở rộng có thể tuyệt vời, nhưng vì không thể gán giá trị cho, từ điển không cho phép nhiều. –

+1

Không rõ ràng * và * kém hiệu quả (tạo một danh sách nhân bản các phím, và thực hiện 2 lần lặp thay vì 1) ... một người chiến thắng! –

4

LINQ là một phương ngữ truy vấn - nó không trực tiếp là ngôn ngữ đột biến.

Để thay đổi các giá trị của một cuốn từ điển hiện có, foreach có lẽ là bạn của bạn:

foreach(int key in dictionary.Keys) { 
    dictionary[key] = 1; 
} 
+0

Nó sẽ không được tốt đẹp nếu nó cũng là một ngôn ngữ đột biến? –

+3

Đó là những gì nó là ... –

+1

Điều này cho phép một lỗi thời gian chạy về bộ sưu tập thay đổi trong quá trình liệt kê, và vòng lặp foreach không thể tiếp tục. – pauldoo

2
foreach (var item in dictionary.Keys) 
    dictionary[item] = 1; 

Tôi tự hỏi tại sao bạn có thể cần làm một điều như vậy, mặc dù.

+0

Đó là một sự đơn giản. –

Các vấn đề liên quan