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;

我收到错误“集合已修改;枚举操作可能无法执行。” 我该如何解决这个问题?

4

5 回答 5

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));
}
于 2012-07-23T08:36:19.910 回答
1

您无法修改使用 foreach 循环的集合。您的情况的解决方案非常简单:由于您不在dc循环内部使用,为什么不使用普通的 for 循环,例如:

int length = dt.Columns.Length;
for (int i = 0; i < length; i++)
{
    dt.Columns.Add(employeeTimings[i], typeof(string));
}
于 2012-07-23T08:39:00.777 回答
0

使用 LINQ,您可以:

    foreach (DataColumn dc in dt.Columns.OfType<DataColumn>().ToArray())
    {
        dt.Columns.Add(employeeTimings[i], typeof(string));
        i++;
    }
于 2012-07-23T08:38:44.010 回答
0

在迭代集合时,您正在dt.Columns使用该方法修改集合:Add

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));
}
于 2012-07-23T08:38:54.630 回答
0

我猜您的真正意图是将完整的employeeTimings 列表添加到数据表列
如果这是正确的,那么您应该在列表而不是列上循环

foreach (string s in employeeTimings) 
    dt.Columns.Add(s, typeof(string)); 
于 2012-07-23T08:42:56.957 回答