字典中的值将被C#中的最后一个值替换

时间:2015-05-25 08:45:48

标签: c# dictionary

我有一个字典类型变量,我保持"字符串"键入键和"列表"类型值。

问题是,在循环的情况下,所有先前的值都被最后一个值替换。

为什么会这样?

        List<IWebElement> indicationsElement = ReturnIndicationList();
        drugsDB = new List<string>();
        for (int i = 0; i < indicationsElement.Count;i++ )
        {
            string key = indicationsElement[i].Text.ToString();
            dt = ZittarPatt.getDrugsByIndication(ClientName, key);
            drugsDB.Clear();

            for (int k = 0; k < dt.Rows.Count; k++)
            {
                drugsDB.Add(dt.Rows[k].ItemArray[3].ToString().Trim());
            }
            drugsByindicationDictionary.Add(key, drugsDB);
        }

2 个答案:

答案 0 :(得分:2)

您每次迭代都会添加相同的引用,而不是添加List<string>的新实例。 每次使用.Clear时,它都会清除drugsByindicationDictionary处已经是相同条目的所有条目 因此,只会保存drugsDB的最后一个添加内容。 (最后使用.Clear

您应该执行以下代码:

List<IWebElement> indicationsElement = ReturnIndicationList();
for (int i = 0; i < indicationsElement.Count;i++ )
{
    string key = indicationsElement[i].Text.ToString();
    dt = ZittarPatt.getDrugsByIndication(ClientName, key);
    var drugsDB = new List<string>();

    for (int k = 0; k < dt.Rows.Count; k++)
    {
        drugsDB.Add(dt.Rows[k].ItemArray[3].ToString().Trim());
    }
    drugsByindicationDictionary.Add(key, drugsDB);
}

答案 1 :(得分:0)

drugsDB.Clear();更改为 drugsDB = new List<string>();