오늘 두 개의 중첩 된 foreach 루프를 사용하는 함수를 코딩했습니다. 보고 나서 예상대로 작동하지 않는다고 디버깅했습니다. 그러나 나는 오류를 보지 않으며 단순한 오류가 내가 알아 차린 행동을 일으킬 수 있다고 생각하지 않습니다.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 개 항목과 목록 < MyClass에>입니다.
디버거가 foreach 외부로 점프하고 내부 foreach에 도달하면 if를 두 번 (cActiveItem 당 한 번) 실행하고 외부 foreach의 끝 부분에 도달합니다. 이제 디버거가 외부 foreach의 헤드로 점프합니다. 할까요. 그러나 외부 foreach의 두 번째 라운드를 시작하는 대신 디버거가 갑자기 MyClass.ToString() 메서드로 점프합니다. 이 방법을 통해 4 번 (checkedListBoxItemList.Items의 항목 수)을 단계적으로 수행 할 수 있으며 ... 아무 것도 표시되지 않습니다. Visual Studio에서 내 창 형식을 표시하고 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을 사용하고 있습니다.
무슨 일이 있었는지 말해주세요. 감사.
'checkedListBoxItemList'의 유형은 무엇입니까? 'foreach'와 함께 사용하기 위해서는'IEnumerable'을 구현해야한다고 생각합니다. 그리고 어떤 타입인지 언급하지 않았습니다. –
분명히 checkedListBoxItemList는 checkedListBox 유형입니다. 하지만 ListBox를 반복하지 않고 checkedListBoxItemList.Items를 통해 반복합니다. 이것은 CheckedItemCollection 유형이며 IEnumerable을 구현합니다. – Marks