2010-10-04 32 views
10

Khi tôi sửa đổi bộ sưu tập tôi đã lặp lại thông qua với foreach, tôi có ngoại lệ. Vì vậy, tôi chỉ tò mò về cách foreach (hoặc thời gian chạy) phát hiện điều đó. Có thể làm như vậy với một đối tượng chung?Làm cách nào để biết được bộ sưu tập được lặp lại đã được sửa đổi?

+2

Tôi không chắc chắn về C#, nhưng trong Java thế giới foreach xây dựng chỉ là một cú pháp cú pháp để bình thường iterator ... Vì vậy nếu bộ sưu tập được sửa đổi trong quá trình lặp lại, ConcurrentModificationException được ném. Có vẻ như đây chính xác là trường hợp ở đây. –

Trả lời

15

Bản thân bộ sưu tập phải phát hiện ra nó. Trong bộ sưu tập thư viện chuẩn, điều này đạt được bằng cách có số phiên bản nội bộ được sửa đổi bởi mỗi thao tác và được kiểm tra bởi trình lặp trên mỗi lần lặp (tức là mỗi lần bạn gọi MoveNext nó sẽ kiểm tra số phiên bản giống như khi trình vòng lặp đã được tạo).

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