C# 如何从DataTable在aspx中创建多维字典?
我做错了什么?我调试了它,“I”、“colName”和“colValue”的值是正确的。不知道为什么会给我错误。C# 如何从DataTable在aspx中创建多维字典?,c#,asp.net,C#,Asp.net,我做错了什么?我调试了它,“I”、“colName”和“colValue”的值是正确的。不知道为什么会给我错误。 我是.net编程的新手在您的内部循环中I不会更改,因此colName的值不会更改。因此,您每次都通过以下方式添加相同的密钥: An exception of type 'System.ArgumentException' occurred in mscorlib.dll but was not handled in user code Additional information:
我是.net编程的新手在您的内部循环中
I
不会更改,因此colName
的值不会更改。因此,您每次都通过以下方式添加相同的密钥:
An exception of type 'System.ArgumentException' occurred in mscorlib.dll but was not handled in user code
Additional information: An item with the same key has already been added.
很可能您想从Columns[j]
而不是Columns[i]
中获取名称,这是一个“第二双眼睛”问题
FWIW,您可以通过使用更具描述性的计数器变量名来避免这种情况,而不是使用“传统的”i
和j
。问题中的代码翻译为,IMHO更容易注意到“列[row]有问题”:
把电话线拔下来
for (int row = 0; i < rowCount; row++)
{
var colDic = new Dictionary<string, string>();
baskets.Add(row, colDic);
for (int col = 0; col < columnCount; col++)
{
var colName = users_table.Columns[row].ColumnName;
var colValue = users_table.Rows[row][col].ToString();
colDic.Add(colName, colValue);
}
}
可能会帮你解决这个问题。NET中的字典不允许幂等
Add
和Set
操作(不同于C++的map
,或PHP和Python中的关联数组),因此你必须以不同的方式处理这两种情况。KeyNotFoundException
var colName = (users_table.Columns[i].ColumnName).ToString();
baskets[i].Add(colName, colValue);
for (int row = 0; i < rowCount; row++)
{
baskets.Add(row, new Dictionary<string, string>());
for (int col = 0; col < columnCount; col++)
{
var colName = (users_table.Columns[row].ColumnName).ToString();
var colValue = users_table.Rows[row][col].ToString();
baskets[row].Add(colName, colValue);
Response.Write(baskets[row]["user_id"].ToString());
}
}
for (int row = 0; i < rowCount; row++)
{
var colDic = new Dictionary<string, string>();
baskets.Add(row, colDic);
for (int col = 0; col < columnCount; col++)
{
var colName = users_table.Columns[row].ColumnName;
var colValue = users_table.Rows[row][col].ToString();
colDic.Add(colName, colValue);
}
}
baskets.Add(i, new Dictionary<string, string>());
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
var colName = users_table.Columns[j].ColumnName;
var colValue = users_table.Rows[i][j].ToString();
baskets[i].Add(colName, colValue);
Response.Write(baskets[i]["user_id"].ToString());
}
}