2013-06-02 24 views
5

Trong những ngày cũ, chúng tôi thuận tiện có thể khởi tạo các bộ sưu tập có thể thay đổi sử dụng niềng răng, như trong ví dụ sau:Tôi có thể khởi tạo bộ sưu tập bất biến BCL bằng niềng răng không?

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}; 

Có một cú pháp tương tự có thể được sử dụng với các bộ sưu tập bất biến BCL? Tôi hiểu nó vẫn là bản phát hành trước nhưng có thể có một cú pháp được đề xuất hoặc ít nhất câu hỏi này sẽ đóng vai trò là phản hồi để triển khai các trình khởi tạo thuận tiện này.

Trong lúc này, ngắn nhất tôi đã tìm thấy như sau:

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}.ToImmutableDictionary(); 

Trả lời

7

Có một cú pháp tương tự có thể được sử dụng với các bộ sưu tập bất biến BCL?

Không xa như tôi biết - không may cả đối tượng và bộ khởi tạo bộ sưu tập đều dựa vào tính có thể thay đổi được. Trong sự tôn trọng đó là một sự xấu hổ rằng ngôn ngữ không được thiết kế sao cho nếu có một phương pháp Add với giá trị trả về, có thể được sử dụng như một giá trị trung gian. (Điều đó sẽ không giúp thiết lập các thuộc tính trong bộ khởi tạo đối tượng, hãy nhớ bạn, và tôi thích tên là Plus đến Add để làm cho ngữ nghĩa rõ ràng hơn.)

Tôi nghĩ cách tiếp cận bạn đang sử dụng là cách tiếp cận phù hợp nhất cho một phím tắt.

Đối ImmutableList nó hơi đơn giản:

var list = ImmutableList.Create(1, 2, 3); 

đó là khá đơn giản (và cho phép loại suy luận) nhưng tôi không biết bất cứ điều gì tương tự cho ImmutableDictionary. Có quá tải Create mất IEnumerable<TKey, TValue>, nhưng việc xây dựng bất kỳ triển khai nào có thể khó coi như chỉ xây dựng từ điển có thể thay đổi được như bạn đã làm.

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