2012-01-14 32 views
17

C# içinde bir sözlük sığ kopyalamanız gerekir. "Hata CS1540: korumalı elemanı object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary erişilemiyor 'eleme tipte olmalıdır` PointFlagger' ya da türetilmiş hata verir Ne yazık kiC# Boş kopya sözlük?

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

: Örneğin

ondan "

Bunun ne anlama geldiğinden emin değilim ... Bir sözlük kopyalamak/düzeltmek için başka bir yol var mı?

cevap

35

Sığ bir kopya almak için, IEnumerable<KeyValuePair<TKey, TValue>> alır gibi Dictionary<TKey, TValue> yapıcısını kullanın. Bu koleksiyonu yeni örneğe ekler.

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

Duuurr! Muhtemelen belgelere daha yakından bakmalıydım ... Çok teşekkür ederim, Jared! Mümkün olduğunda cevabınızı kabul edeceğim. –

+0

Cevap kabul gecikme için üzgünüm, orada ne olduğundan emin değilim –

+2

@Georges sorun değil. Sadece – JaredPar

6

Bu açıkça ben maintainability nedenlerle tercih türlü, yazmak zorunda değilsiniz buldum genel yol:

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

nedir "kvp => kvp.Key, kvp => kvp.Value "bu bağlamda. Anahtar ve değer nasıl ekleyeceğim. Sonunda bir hata gösteriliyor – Pratik

+0

ToDictionary() uzantı yöntemine erişmek için 'System.Linq' için bir kullanma ifadesi eklemeniz gerekiyor. –