Поведение Dictionary при объявлении списка

120
16 мая 2019, 17:20

Написал вот такой вот код:

  private void setCombineQuerys()
    {
        Dictionary<string, Action> temp = new Dictionary<string, Action>();
        temp.Add("Проверка на категорию", checkCategoryClass);
        temp.Add("Проверка на тип документа", checkPassport);
        temp.Add("Проверка на активный результат", checkActiveResult);
        temp.Add("Проверка на УКП", checkParticipantsUKP);
        temp.Add("Проверка на ОВЗ", checkParticipantsOVZ);
        Category Participants = new Category("Участники", true, temp, queryForParticipants);
        ListA.Add(Participants);
        temp.Clear();
        temp.Add("Проверка на телефон", checkMobilePhone);
        temp.Add("Проверка на почту", checkEmail);
        temp.Add("Проверка на код работника", checkWorkerCode);
        temp.Add("Проверка на код станционарный телефон", checkStaticPhone);
        temp.Add("Проверка на специализацию", checkParticipantSpecialization);
        temp.Add("Проверка на прикрепление к ппэ", checkParticipantPP);
        temp.Add("Проверка на категорию", checkParticipantCategory);
        Category Workers = new Category("Работники", false, temp, "");/*Заменить запрос*/
        ListB.Add(Workers);
    }

И вроде бы в итоге должно быть два экземпляра класса Category: Participants с 5 элементами проверок и Workers с 7 элементами, но, когда я обращаюсь к первому, то получаю в ответ 7 элементов Category Workers.

Объясните мне, почему так происходит? Прогнал по шагам: 1. Создаётся нулевой temp 2. Заполняется пятью экземплярами 2. Создаётся Participants и заполняется пятёркой temp 3. Очищается temp методом Clear() и у Participants значение temp становится нулевым. 4. temp заполняется семью экземплярами 5. Создаётся Workers и заполняется семёркой temp. Participants в этот момент также заполняется этой семёркой. Это свойство Dictionary и метода Clear?

Класс Category:

public class Category{
             private string name;
             private bool bD;
             private string query;
             private Dictionary<string, Action> methods;
             public string Name { get => name; set => name = value; }
             public bool BD { get => bD; set => bD = value; }
             public string Query { get => query; set => query = value; }
             public Dictionary<string, Action> Methods { get => methods; set => methods = value; }
             public Category(string name, bool bd, Dictionary<string,Action> methods, string query)
             {
                 this.Name = name;
                 this.BD = bd;
                 this.Query = query;
                 this.Methods = methods;    
              } 
        }
Answer 1

Dictionary ссылочный контейнер, поэтому после очищения ссылки обновляются в обоих списках

Странное поведение Dictionary

READ ALSO
Объясните каждую строчку в методе shellSort

Объясните каждую строчку в методе shellSort

Рассматриваю пример изучения на практике алгоритмов сортировокНе могу разобраться с циклами

145
WPF как правильно создавать MenuItem?

WPF как правильно создавать MenuItem?

Я пытаюсь худо-бедно реализоввывать паттерн MVVMПри создании MenuItem возникли впросы по поводу привязки данных

207
Показать координаты точки графика при наведении

Показать координаты точки графика при наведении

есть график функции типа chartНеобходимо написать код, что бы по наведению мышки на точку графика, показывались координаты точки

161
C# SendMessage отправку двух языков

C# SendMessage отправку двух языков

Нужно чтобы программа брала из textbox текст и отправляла, по нажатию кнопки, в то место, где грубо говоря ее вставят, будь то строчка в браузере...

196