Установка значения в зубчатом словаре устанавливает все значения - PullRequest
2 голосов
/ 07 августа 2011

У меня есть зубчатый словарь:

 Dictionary<string, Dictionary<int, Dictionary<string, string>>> tierOptions = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>();

Позже у меня есть код, который устанавливает одно из этих значений в массиве:

 tierOptions[optionID][npID]["tName"] = cboTier.Text;

Проблема заключается в том, что при запускев этой части кода все элементы tName устанавливаются в cboTier.Text, а не только в один элемент.

Например, если optionID равен 1, а npID равен 8, и у меня было три:

 tierOptions[1][8]["tName"]
 tierOptions[2][8]["tName"]
 tierOptions[3][8]["tName"]

Эта конкретная строка кода установит все три, а не просто tierOptions [1] [8] ["tName"]

Есть идеи, почему это происходит?Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

Звучит так, будто вы использовали один и тот же экземпляр словаря в нескольких «измерениях» (ваша терминология). Поскольку это ссылка, все они являются общими (здесь нет автоматического клонирования в изолированные копии).

При заполнении данных позаботьтесь о том, чтобы использовать отдельные словарные экземпляры, когда данные должны быть разделены.

0 голосов
/ 07 августа 2011

Да, я бы сказал, что это как Марк.Пожалуйста, посмотрите на этот пример, как вы можете получить vlaue из словаря вашего типа:

        Dictionary<string, Dictionary<int, Dictionary<string, string>>> dic = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>();
        //add to 1st dic:
        dic.Add("A", new Dictionary<int, Dictionary<string, string>>());
        //add to 2nd dic:
        dic["A"].Add(1, new Dictionary<string, string>());
        //add to 3rd dic:
        dic["A"][1].Add("a", "value 1");

        //string KeyIn3rdDic = dic["A"][1].ToString();
        string ValueIn3rdDic = dic["A"][1]["a"]; //result is "value 1";        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...