2012-01-14 42 views
17

Tôi cần phải sao chép cạn từ điển trong C#.C# Từ điển bản sao nông nghiệp?

Ví dụ:

Dictionary<int,int> flags = new Dictionary<int,int>(); 
flags[1] = 2; 
flags[2] = 3; 
flags[0] = 9001; 
Dictionary<int,int> flagsn = flags.MemberwiseClone(); 

Thật không may, đó trả về lỗi: "error CS1540: Không thể truy cập được bảo vệ thành viên object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary 'Các vòng loại phải loại' PointFlagger' hoặc có nguồn gốc từ đó "

Không hoàn toàn chắc chắn điều này có nghĩa là gì ... Có cách nào khác để nông sao chép từ điển/sửa mã của tôi ở trên không?

Trả lời

35

Để lấy bản sao nông, chỉ cần sử dụng hàm tạo Dictionary<TKey, TValue> khi mất IEnumerable<KeyValuePair<TKey, TValue>>. Nó sẽ thêm bộ sưu tập này vào thể hiện mới.

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags); 
+0

Duuurr! Có lẽ tôi nên xem xét kỹ hơn tài liệu ... Cảm ơn rất nhiều, Jared! Tôi sẽ chấp nhận câu trả lời của bạn khi có thể. –

+0

Agh xin lỗi vì sự chậm trễ trong việc chấp nhận câu trả lời, không chắc chắn những gì đã xảy ra ở đó –

+2

@Georges không có vấn đề gì. Vui lòng giúp đỡ – JaredPar

6

Đây là một cách chung chung tôi tìm thấy nơi bạn không phải viết một cách rõ ràng bất kỳ loại, mà tôi thích vì lý do bảo trì:

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 
+0

" kvp => kvp.Key, kvp => là gì kvp.Value "trong ngữ cảnh này. Làm thế nào tôi sẽ thêm khóa và giá trị. Nó hiển thị lỗi ở cuối của tôi – Pratik

+0

Bạn cần thêm câu lệnh using cho 'System.Linq' để truy cập vào phương thức mở rộng ToDictionary(). –

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