Bạn cannot use a foreach
to remove items trong liệt kê, bạn sẽ nhận được một ngoại lệ khi chạy.
Bạn có thể sử dụng List.RemoveAll
:
list.RemoveAll(x => x.Number == 1);
hoặc, nếu nó thực sự không phải là một List<T>
nhưng bất kỳ chuỗi, LINQ:
list = list.Where(x => x.Number != 1).ToList();
Nếu bạn chắc chắn rằng chỉ có một mục với con số đó hoặc bạn muốn xóa một mục ở mức tối đa, bạn có thể sử dụng cách tiếp cận vòng lặp được đề xuất trong câu trả lời khác hoặc điều này:
var item = list.FirstOrDefault(x => x.Number == 1);
if(item ! = null) list.Remove(item);
Liên kết đến câu hỏi khác mà tôi đã đăng gợi ý rằng bạn có thể sửa đổi bộ sưu tập trong quá trình liệt kê trong C# 4 và sau đó. Không, bạn không thể. That applies only to the new concurrent collections.
Nguồn
2014-11-28 20:17:19
Vì vậy, mã của bạn không hoạt động hoặc cái gì? –
Trái ngược với những gì bạn đang khiếu nại, mã hiện tại của bạn không liên quan đến LINQ. Bạn có lý do cụ thể cho việc muốn/cần một giải pháp dựa trên LINQ? Hoặc bất kỳ giải pháp hiệu quả nào khác cũng có thể chấp nhận được không? – stakx
@VsevolodGoloviznin: Đoạn mã trên không thể hoạt động vì nó có chứa các lỗi cú pháp - 'list.remove (someobject)'. – stakx