我对以下表格有回复:
page1Title:507
page1URL:577
我的代码应该将页面的每个属性映射到嵌套字典中的页面键,并为所有页面执行此操作:
Dictionary<string,string> mapOfSinglePage = new Dictionary<string, string>();
Dictionary<string,Dictionary<string,string>> mapOfAllPages = new Dictionary<string, Dictionary<string, string>>();
string[] keys = { "title", "url","description","owner","cat", "pts" };
for (int i = 1; i < 11; i++)
{
foreach (string key in keys) {
mapOfSinglePage[key] = Regex.Split(responses[i], "<br />")[Array.IndexOf(keys, key)].Split(':')[1];
}
mapOfAllPages[i + ". page"] = mapOfSinglePage;
mapOfSinglePage.Clear();
}
String response = "";
string help = "";
foreach (KeyValuePair<string, Dictionary<string, string>> kvp in mapOfAllPages)
{
foreach(KeyValuePair<string,string> kvp2 in kvp.Value)
{
help+= string.Format("Key : {0}, Value : {1}", kvp2.Key, kvp2.Value);
}
response+= string.Format("Key : {0}, Value : {1}", kvp.Key, help);
help = "";
}
Response.Write(response);
问题是,当我打印出来时,它出现了
Key : 1. page, Value : Key : 2. page, Value : Key : 3. page
等等。换句话说,mapOfSllPage字典在被映射到mapOfAllPages时是空的
如果mapOfSinglePage
字典的clear()在分配给mapOfAllPages
之前,似乎是正常的行为,但事实并非如此。
还是我打错了?对我来说似乎并非如此
答案 0 :(得分:0)
你的问题是:
mapOfAllPages[i + ". page"] = mapOfSinglePage;
mapOfSinglePage.Clear();
您假设这会复制mapOfSinglePage
并将该副本放入mapOfAllPages[i + ". page"]
,然后清除原始Dictionary
。
没有。它使mapOfAllPages[i + ". page"]
指向mapOfSinglePage
,然后将其清除。
您每次都需要创建一个新的Dictionary
,并且永远不要清除它。