我如何使用listDictionary?

时间:2010-06-18 11:19:49

标签: c# .net

我可以填写我的listdictinary但是,如果运行错误在“foreach(字符串ky in ld.Keys)”中返回给我(无效操作异常未处理)

错误详细信息:创建指向样本集合列表的指针后,已更改。 C#

       ListDictionary ld = new ListDictionary();
            foreach (DataColumn dc in dTable.Columns)
            {
                MessageBox.Show(dTable.Rows[0][dc].ToString());
                ld.Add(dc.ColumnName, dTable.Rows[0][dc].ToString());
            }

            foreach (string ky in ld.Keys)
                if (int.TryParse(ld[ky].ToString(), out QuantityInt))
                    ld[ky] = "integer";
                else if(double.TryParse(ld[ky].ToString(), out QuantityDouble))
                    ld[ky]="double";
                else
                    ld[ky]="nvarchar";

2 个答案:

答案 0 :(得分:2)

你的第二个foreach循环通过设置ld [ky] =“whatever”来改变ListDictionary;您不能使用foreach循环执行此操作,因为它在内部使用枚举器。使用枚举器时,更改要枚举的集合是非法的。

相反,请使用for循环。

更好的是,在dTable.Columns的单个循环中完成整个操作,在添加每个项目时设置字典中的值。

ListDictionary ld = new ListDictionary();
foreach (DataColumn dc in dTable.Columns)
{
     MessageBox.Show(dTable.Rows[0][dc].ToString());

     string value;
     if (int.TryParse(dTable.Rows[0][dc].ToString(), out QuantityInt))
           value = "integer";
     else if(double.TryParse(dTable.Rows[0][dc].ToString(), out QuantityDouble))
           value="double";
      else
           value="nvarchar";

     ld.Add(dc.ColumnName, value);
}

答案 1 :(得分:0)

您不能在foreach循环中修改集合 相反,你需要使用for循环。