基本的に、次のような辞書のリストがあります。
List<Dictionary<string, string>>
テストの目的で、36 個の辞書項目をリストにフェッチし、関数の最後でリストを返します。
奇妙なことに、リストにデータを入力すると、辞書の Key=>Value ペアが Visual Studio Inspector のリストに追加されていることがわかりますが、リストにデータを入力するために使用された元の辞書をクリアすると、36 しか残っていません。リスト内の空のアイテム。
私が気付いていないリストの奇妙な動作はありますか? 参照用にコードスニップを以下に示します...
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;