2012-07-23 88 views
0
List<String> employeeTimings; 
    public string[] sTime = {"0000", "0030", "0100", "0130", "0200", "0230", "0300", "0330", "0400", "0430", "0500", "0530", "0600", "0630", "0700", "0730", "0800", "0830", "0900", "0930", "1000", "1030", "1100", "1130", "1200", 
           "1230", "1300", "1330", "1400", "1430", "1500", "1530", "1600", "1630", "1700", "1730", "1800", "1830", "1900", "1930", "2000", "2030", "2100", "2130", "2200", "2230", "2300", "2330"}; 

employeeTimings = new List<String>(sTime); 
     int i=0; 
     DataTable dt = new DataTable(); 
     dt.Columns.Add(new DataColumn("Location", typeof(string))); 
     dt.Columns.Add(new DataColumn("Station", typeof(string))); 

     foreach (DataColumn dc in dt.Columns) 
     { 
      dt.Columns.Add(employeeTimings[i], typeof(string)); 
      i++; 
     } 
     SchedulingTableDGV.DataSource = dt; 

我收到一個錯誤「集合被修改;枚舉操作可能無法執行」。我該如何解決這個問題?C#集合已被修改;枚舉操作可能不會執行

回答

3

您無法在要迭代的集合中添加或刪除foreach。您需要執行添加或刪除foreach以外的操作。

foreach (DataColumn dc in dt.Columns) 
    { 
     dt.Columns.Add(employeeTimings[i], typeof(string)); // Problem. 
     i++; 
    } 

試試這個:

foreach (var timing in employeeTimings) 
{ 
    dt.Columns.Add(timing, typeof(string)); 
} 
+0

ü可以給我寫一個例子,這種情況下怎麼辦? – 2012-07-23 08:38:17

+0

您可以改爲使用for循環。 'for(int i = 0; i Liron 2012-07-23 08:39:27

+0

@KennethTeo我已經用可能的替代方法更新了答案。 – 2012-07-23 08:40:06

0

使用LINQ,你可以這樣做:

foreach (DataColumn dc in dt.Columns.OfType<DataColumn>().ToArray()) 
    { 
     dt.Columns.Add(employeeTimings[i], typeof(string)); 
     i++; 
    } 
0

要修改的集合dt.ColumnsAdd方法,而你是遍歷它:

foreach (DataColumn dc in dt.Columns) 
{ 
    dt.Columns.Add(employeeTimings[i], typeof(string)); 
    i++; 
} 

除了而不是添加所有時序字符串,這將修改您要添加列的集合。

你應該列舉employeeTimings,並添加喜歡的列:

foreach(string s in employeeTimings) 
{ 
    dt.Columns.Add(s, typeof(string)); 
} 
1

您不能修改你用foreach循環遍歷集合。你的情況的解決方案很簡單:既然你不使用dc內循環,爲什麼不使用正常的循環,如:

int length = dt.Columns.Length; 
for (int i = 0; i < length; i++) 
{ 
    dt.Columns.Add(employeeTimings[i], typeof(string)); 
} 
0

我猜你的真正意圖是列表添加完整employeeTimings到數據表列
如果這是正確的,那麼你應該在名單上圈不是在列

foreach (string s in employeeTimings) 
    dt.Columns.Add(s, typeof(string));