2012-07-23 91 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));