今日は、ネストされた 2 つの foreach ループを使用する関数をコーディングしました。期待どおりに動作しないことを確認した後、デバッグしました。しかし、私はエラーを見ていないし、単純なエラーが私が気づいた動作を引き起こす可能性があるとは思わない.
パーツは次のようになります。
foreach(MyClass cItem in checkedListBoxItemList.Items)
{
foreach(MyClass cActiveItem in ActiveItemList)
{
if (cActiveItem.ID == cItem.ID) /*...check checkbox for item...*/;
}
}
たとえば、checkedListBoxItemList.items は MyClass タイプの 4 つの項目を保持し、ActiveItemList は 2 つの項目を持つ List< MyClass > です。
デバッガーは外側の foreach にジャンプし、内側の foreach に到達し、if を 2 回 (cActiveItem ごとに 1 回) 実行し、外側の foreach の最後に到達します。しかし、外側の foreach の 2 番目のラウンドを開始する代わりに、デバッガーは突然 MyClass.ToString() メソッドにジャンプします。このメソッドを 4 回 (checkedListBoxItemList.Items 内のアイテムの数) ステップ実行できますが、その後 ... 何も実行できません。Visual Studio に Windows フォームが表示され、foreach が続行されません。
コードを変更すると
int ListCount = checkedListBoxItemList.Items.Count;
for(int i=0; i<ListCount; i++)
{
MyClass cItem = checkedListBoxItemList.Items[i] as MyClass;
foreach(MyClass cActiveItem in ActiveItemList)
{
if (cActiveItem.ID == cItem.ID) /*...check checkbox for item...*/;
}
}
すべてが正常に動作し、想定どおりです。私はその問題を同僚に見せましたが、彼も何が起こったのか理解していませんでした。デバッガーが MyClass.ToString() メソッドにジャンプする理由がわかりません。F10 を使用してステップスルーしたので、関数を終了する必要はありません。また、理由があるとすれば、なぜ foreach ループを継続しないのでしょうか。
これが問題である場合、私はVisual Studio 2010を使用しています。
何が起こったのか教えてください。ありがとう。