添加后清除字典数据吗?

时间:2019-04-10 13:11:29

标签: c#

这是一个简化的代码,为什么当我调用Tuple方法时,我的字典词典中的所有item.Clear()列表数据(键除外)都被清除了?我不能将item参数放在for循环中,因为这是更复杂的嵌套循环的一部分

var dict = new Dictionary<string, List<Tuple<string, string>>>();
var item = new List<Tuple<string, string>>();

for (int i = 0; i < 5; i++)
{
    item.Add(new Tuple<string, string>("key1", $"itemKey{i.ToString()}"));
    item.Add(new Tuple<string, string>("key2", $"itemKey{i.ToString()}"));
    item.Add(new Tuple<string, string>("key3", $"itemKey{i.ToString()}"));
    item.Add(new Tuple<string, string>("key4", $"itemKey{i.ToString()}"));
    dict.Add($"dictKey{i.ToString()}", item);
    item.Clear();
}

1 个答案:

答案 0 :(得分:0)

调用dict.Add($"dictKey{i.ToString()}", item);时,对象引用将添加到字典中。由于您正在清除项目列表,因此字典也将被清除。

将代码修改为dict.Add($"dictKey{i.ToString()}", new List<Tuple<string, string>>(item));不会清除字典中的条目,因为列表的副本已添加到字典中。