C # Мелкая копия словаря? - PullRequest
19 голосов
/ 14 января 2012

Мне нужно поверхностно скопировать словарь в 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' или быть его производным "

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

Ответы [ 2 ]

41 голосов
/ 14 января 2012

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

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags);
8 голосов
/ 14 марта 2012

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

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