2012-01-14 7 views
17

Мне нужно неглубоко скопировать словарь в C#.C# Мелкая копия Словарь?

Например:

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

К сожалению, возвращает ошибку: «ошибка CS1540: не удается получить доступ к защищенному члену object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary. Спецификатор должен быть типа` PointFlagger 'или производным от этого "

Не совсем уверен, что это значит ... Есть ли другой способ мелкой копии словаря/исправить мой код выше?

ответ

35

Чтобы получить мелкую копию, используйте конструктор Dictionary<TKey, TValue>, так как он принимает IEnumerable<KeyValuePair<TKey, TValue>>. Он добавит эту коллекцию в новый экземпляр.

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

Duuurr! Вероятно, мне следовало подойти поближе к документации ... Спасибо, Джаред! Я отвечу на ваш ответ, когда это возможно. –

+0

Agh извините за задержку в принятии ответа, не уверен, что там произошло –

+2

@Georges не проблема. Просто рад помочь – JaredPar

6

Это универсальный способ я нашел, где вы не должны явно писать любой тип, который я предпочитаю по причинам ремонтопригодности:

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

Что такое «kvp => kvp.Key, kvp => kvp.Value "в этом контексте. Как добавить ключ и значение. Он показывает ошибку на моем конце – Pratik

+0

Вам нужно добавить инструкцию using для 'System.Linq' для доступа к методу расширения ToDictionary(). –

 Смежные вопросы

  • Нет связанных вопросов^_^