Lưu ý: Điều này đã hoạt động tốt, nhưng tôi đang cố gắng để hiểu Tại sao nó hoạt động theo cách này, nhưng không phải là khác.Sự nhầm lẫn mã - tại sao một người làm việc, nhưng không phải là người khác?
Tôi có một WinForm (C#) với động đưa hình ảnh, như vậy:
Bây giờ nếu bạn nhấp vào nút 'Napred', những hình ảnh này sẽ bị xóa (trong số những thứ khác), mà tôi ban đầu sử dụng:
foreach(Control ctrl in Controls)
if(ctrl is PictureBox) ctrl.Dispose();
hoặc
for(int i = 0; i < Controls.Count; i++)
if(Controls[i] is PictureBox) Controls[i].Dispose();
Bây giờ nếu tôi chạy này, tôi nhận được:
Nhưng nếu tôi chỉ cần thay đổi tuyên bố for
để gửi nó về phía sau, nó làm việc?
for(int i = Controls.Count - 1; i >= 0; i--)
if(Controls[i] is PictureBox) Controls[i].Dispose();
(Tôi sẽ không để tải lên hình ảnh khác, nhưng nó sẽ xoá tất cả các yếu tố (Tôi chỉ nhận được các nút còn lại trong cuối))
Ai đó có thể soi sáng cho tôi lý do tại sao một việc , nhưng không phải là khác?
EDIT: Tôi đang sử dụng phiên bản cộng đồng VS2015 trên Windows 10 nếu đó là một lỗi gỡ lỗi
Nếu bạn có một mảng của 10 mặt hàng và sau đó xóa Item1, Item2 sẽ trở nên mới Item1 và bạn sẽ có 9 mục còn lại. Phương pháp tiêu chuẩn để xử lý các mục mảng là bước qua nó. – LightBulb
Có thể quan tâm đến các cách tiếp cận khác: http://stackoverflow.com/questions/7340757/c-sharp-list-removing-items-while-looping-iterating –
Tại sao bạn không sử dụng phương pháp Xóa? –