C # Неверный экземпляр словаря?

17

Мне нужно неглубоко скопировать словарь в 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» или получен из него »

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

    
задан Georges Oates Larsen 14.01.2012 в 01:44
источник

2 ответа

36

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

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags);
    
ответ дан JaredPar 14.01.2012 в 01:46
источник
6

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

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
    
ответ дан gatopeich 14.03.2012 в 16:29
источник