C# 如何从DataTable在aspx中创建多维字典?

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:

我做错了什么?我调试了它,“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: 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());
    }
}