2010-06-18 25 views
3

我可以填補我listdictinary但是,如果運行錯誤返回到我「的foreach(在ld.Keys串KY)」(無效操作異常是未處理)我如何使用listDictionary?

錯誤詳細:創建一個指向列表後樣品採集已更改。 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";
+0

可能重複[我怎樣才能使用listDictionary像列表通用?](http://stackoverflow.com/questions/3068982/how-can-i-use-listdictionary-like-list-generic) – dtb 2010-06-18 11:21:34

+0

爲什麼附加了visual-studio標籤?這是某種特定的視覺工作室? (如果是的話,請原諒我的無知) – 2010-06-18 11:21:56

+0

我已經刪除了那些標籤 – 2010-06-18 11:24:27

回答

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); 
} 
0

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