2012-01-14 2 views
17

C#에서 사전을 얕은 사본으로 만들어야합니다. "오류 CS1540 : 보호 된 멤버 object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary에 액세스 할 수 없습니다 것은 '. 한정자는 유형이어야합니다`PointFlagger'또는 파생 된 오류를 반환 불행하게도C# Shallow copy 사전?

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

: 예를 들어

그것으로부터 "

이것이 무엇을 의미하는지 확실히 모릅니다 ... 사전을 얕게 복사하거나 위의 코드를 수정하는 또 다른 방법이 있습니까?

답변

35

얕은 복사본을 얻으려면, 을 사용하므로 Dictionary<TKey, TValue>의 생성자를 사용하십시오. 이 컬렉션을 새 인스턴스에 추가합니다.

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

Duuurr을! 아마도 문서를 더 자세히 보았어야했는데 ... 고맙습니다, Jared! 가능할 때 당신의 대답을 받아 들일 것입니다. –

+0

답변 접수 지연으로 미안합니다. 거기에 무슨 일이 일어 났는지 확실하지 않습니다. –

+2

@ 아무 문제 없습니다. – JaredPar

6

이 당신이 명시 적으로 내가 유지 보수 이유로 선호하는 모든 종류, 작성하지 않아도 내가 찾은 일반적인 방법 :

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

을 사용하는 것 같습니다. "kvp => kvp.Key, kvp => 이 문맥에서 "kvp.Value". 열쇠와 가치를 어떻게 추가 할 것인가? 내 마지막에 오류가 있습니다. – Pratik

+0

ToDictionary() 확장 메소드에 액세스하려면'System.Linq'에 using 문을 추가해야합니다. –