이것은 내가 사전을 복사하는 것에 대해 이해한다고 생각한 것에 반하는 것입니다. 말, 나는 다음과 같은 코드를 가지고 : 나는 복사 사전을 변경 나는 원래 하나를 변경하지 않을 것이라고 예상하고 있었다예기치 않은 복사 결과
public class MyClass
{
public string str1;
public MyClass(string s)
{
str1 = s;
}
}
Dictionary<string, MyClass> dic1 = new Dictionary<string, MyClass>();
dic1.Add("0", new MyClass("hello"));
//Make 'dic2' as a copy of 'dic1'
Dictionary<string, MyClass> dic2 = new Dictionary<string, MyClass>(dic1);
//Alter 'dic1'
dic1.ElementAt(0).Value.str1 += "!!!";
//I was expecting dic2 not to be altered, but IT IS!
Debug.Assert(dic2["0"].str1.Equals(dic1["0"].str1, StringComparison.Ordinal) == false); //Result is true for equality
을하지만 내 코드의 경우되지 않습니다.
내가 뭘 잘못하고 있니?
구글 힌트 : 깊은 copy''대'얕은 copy'합니다. 실제 개체가 아닌 참조를 복사하고 있습니다. – Corak
[매개 변수 전달] (http://www.yoda.arachsys.com/csharp/parameters.html)에 대한 Jon Skeets 기사도 참조 할 수 있습니다. – Default
@Default : 더 잘 문서화 되었으면 좋겠습니다. 나는이 방법을 사용하기 시작했다. "C# copy dictionary"를 검색 한 후에 내 전체 사전이 복사되었다고 생각했다. – c00000fd