我基本上有一個像字典的名單:C#爲什麼清理原始對象時我的清單項目被清空?
List<Dictionary<string, string>>
對於我取36字典項到列表中,然後在我的函數的端返回的列表中的測試目的。
奇怪的是,當我填充列表時,我可以看到在Visual Studio Inspector中添加到列表中的字典的Key => Value對,但是在清除用於填充我的列表的原始字典時,所有仍然是列表中的36個空項目。
有沒有我不知道的一些奇怪的List行爲發生?以下代碼片段供參考...
List<Dictionary<string, string>> allResults = new List<Dictionary<string, string>>();
Dictionary<string, string> selectResult = new Dictionary<string, string>();
MySqlCommand cmd = new MySqlCommand(query, conn);
MySqlDataReader dataReader = cmd.ExecuteReader();
try
{
while (dataReader.Read())
{
for (int i = 0; i < dataReader.FieldCount; i++)
{
selectResult.Add(dataReader.GetName(i).ToString(), dataReader.GetValue(i).ToString());
}
allResults.Add(selectResult);
//Something to do with this next line seems to cause the List to also lose the values stored in the Dictionary, is clearing the dictionary not allowed at this point and the list is simply referencing the Dictionary rather than 'making a copy'?
selectResult.Clear();
}
dataReader.Close();
}
catch { }
this.Close();
return allResults;
真的沒有什麼好的理由在'while'循環之外定義字典。它只意味着你可能會忘記重新初始化它,或者在循環的範圍之前/之後使用它,它只是沒有意義被使用。如果你在循環中定義它,你確保它每次都被編譯器初始化,並確保它不能用在其它沒有意義的上下文中。 – Servy 2013-03-22 16:00:59
是的,我同意並修復答案,但是我仍然對這種數據表的改造感到困惑。 – Steve 2013-03-22 16:03:12
噢,現在我的答案和你的答案是一樣的...... – Steve 2013-03-22 16:05:32