1

これが私のコードです:

foreach (OrderItem item in OrderInfo.order)
{
     orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count;
}

例外があります。foreach
内のコレクションを変更できないことはわかってい ます。このコードを変更して機能させるにはどうすればよいですか? それが LINQ コードであれば、何よりも優れています。

例外は、「コレクションが変更されました」と言っています。申し訳ありませんが、英語ではないため、例外の実際のメッセージを提供できません

ごめんなさいみんな。コレクションが変更されている場所を見つけました。*numericUpDown_ValueChanged* ハンドラ内にありました。とにかく答えが出ました。ありがとうございました

4

3 に答える 3

7

ToList()このように、次のように使用できます。

foreach (OrderItem item in OrderInfo.order.ToList())
{
     orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count;
}

または、通常の for ループを使用します。

for (int i = 0 ; i < OrderInfo.order.Count; i++)
{
     OrderItem item = OrderInfo.order[i];
     orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count;
}

ヒント: パフォーマンスに関しては、2 番目の方法を使用することをお勧めします。

于 2013-01-19T09:57:24.490 に答える
2

これは、コレクションを変更する必要があるときに行うことです。

foreach (OrderItem item in OrderInfo.order.ToList())
{
     ...
}

コピーを作成します。コピーを列挙しますが、元のものを更新します。

于 2013-01-19T09:58:08.640 に答える