клонирование словаря со списком в качестве значений - PullRequest
0 голосов
/ 24 октября 2011

как вы клонируете словарь, такой как этот:

Dictionary<int, List<User>>()

Каждая попытка клонирования, которую я предпринимаю, заканчивается неудачей.

Если у меня есть это:

Dictionary<int, List<User>> dict1 = new Dictionary<int, List<User>>();
User user1=new User{Name="Mey"};
dict1.Add(1,user1);

делает это:

var dict2 = new Dictionary<int, List<User>>(dict1);

dict2 по-прежнему будет ссылаться на user1 вместо нового объекта User.

Я хочу, чтобы объект User дублировался, чтобы изменение свойств клона не отражалось на исходном объекте.

Редактировать:

Итак, я написал следующий фрагмент кода:

        var dict2 = new Dictionary<int, List<User>>();

        //clone the dict1 dictionary
        foreach (var item in dict1)
        {
            var list = new List<User>();
            foreach (var u in item.Value)
            {
                list.Add(new User{ Name = u.Name, Total=u.Total}); 
            }
            dict2.Add(item.Key, list);
        }

     class User
     { 
        public string Name{get;set;}
        public double Total{get;set;}
     }

Ответы [ 2 ]

3 голосов
/ 24 октября 2011

.Net коллекции не имеют встроенной поддержки клонирования.

Вам необходимо создать новый словарь, пройтись по всем записям в исходном словаре, добавить соответствующую запись с новым List<User>в новом словаре и переберите исходный список, чтобы добавить копии объектов User в новый список.

0 голосов
/ 24 октября 2011

Вы можете использовать BinaryFormatter :

1) Сериализация вашего объекта в MemoryStream

следовательно

2) Десериализация MemoryStream в новый объект

...