2012-01-14 15 views
17

Potrzebuję płytkiej kopii słownika w języku C#.C# Shallow copy Dictionary?

Na przykład:

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

Niestety, to zwraca błąd: „error CS1540: Nie można uzyskać dostępu do chronionych członkiem object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary 'Kwalifikator musi być typu` PointFlagger' lub pochodzą z niego "

Nie do końca pewny, co to oznacza ... Czy jest inny sposób na płytkie kopiowanie słownika/naprawienie powyższego kodu?

Odpowiedz

35

Aby uzyskać płytką kopię, wystarczy użyć konstruktora z Dictionary<TKey, TValue>, ponieważ trwa to IEnumerable<KeyValuePair<TKey, TValue>>. Doda tę kolekcję do nowej instancji.

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

Duuurr! Prawdopodobnie powinienem przyjrzeć się bliżej dokumentacji ... Dziękuję bardzo, Jared! Przyjmę twoją odpowiedź, jeśli to możliwe. –

+0

Agh przepraszam za opóźnienie w przyjęciu odpowiedzi, nie jestem pewien, co się tam stało –

+2

@Georges bez problemu. Po prostu cieszę się, że mogę pomóc – JaredPar

6

Jest to ogólny sposób znalazłem gdzie nie trzeba jawnie pisać dowolnego typu, które wolę ze względów utrzymywalności:

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

Co to jest "kvp => kvp.Key, kvp => kvp.Value "w tym kontekście. Jak dodaję klucz i wartość. To pokazuje błąd pod moim koniec. – Pratik

+0

Musisz dodać instrukcję using dla 'System.Linq', aby uzyskać dostęp do metody rozszerzenia ToDictionary(). –