Это противоречит тому, что, как я думал, я понял о копировании Словаря. Скажем, у меня есть следующий код:Неожиданные результаты копирования Словаря
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
Я ожидал, что изменение скопированного словаря я не изменил бы оригинал, но это не так с моим кодом.
Что я делаю неправильно?
Google намек: 'неглубокие copy' в сравнении' глубокой copy'. Вы копируете ссылки, а не фактические объекты. – Corak
Вы можете прочитать статью Джона Скита о [параметрировании прохождения] (http://www.yoda.arachsys.com/csharp/parameters.html), что также объясняет ссылки. – Default
@Default: Я просто хочу, чтобы это было лучше документировано. Я начал использовать этот метод после поиска «Словарь для копирования C#», считая, что весь мой словарь скопирован. – c00000fd