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 に答える