Hỗ trợ hành vi này yêu cầu xử lý nội bộ khá phức tạp, vì vậy hầu hết các bộ sưu tập không hỗ trợ điều này (tôi không chắc chắn về không gian tên Concurrent
).
Tuy nhiên, bạn có thể mô phỏng rất tốt hành vi này bằng cách sử dụng các bộ sưu tập không thay đổi. Chúng không cho phép bạn sửa đổi bộ sưu tập theo thiết kế, nhưng bạn có thể làm việc với chúng theo cách hơi khác và loại xử lý này cho phép bạn sử dụng đồng thời điều tra mà không xử lý phức tạp (được thực hiện trong bộ sưu tập Concurrent
).
Bạn có thể thực hiện một bộ sưu tập như thế một cách dễ dàng, hoặc bạn có thể sử dụng FSharpList<T>
từ FSharp.Core.dll
(không phải là một phần tiêu chuẩn của .NET 4.0 mặc dù):
open Microsoft.FSharp.Collections;
// Create immutable list from other collection
var list = ListModule.OfSeq(anyCollection);
// now we can use `GetEnumerable`
var en = list.GetEnumerable();
// To modify the collection, you create a new collection that adds
// element to the front (without actually copying everything)
var added = new FSharpList<int>(42, list);
Lợi ích của bộ sưu tập bất biến là bạn có thể làm việc với chúng (bằng cách tạo bản sao) mà không ảnh hưởng đến bản gốc, và vì vậy hành vi bạn muốn là "miễn phí". Để biết thêm thông tin, có một số great series by Eric Lippert.
Nguồn
2010-05-02 14:41:19
Bạn có thể giải thích lý do tại sao bạn cần sửa đổi bộ sưu tập cùng một lúc mà bạn đang đọc từ bộ sưu tập đó không? Có thể có một cách khác để làm những gì bạn muốn. –