이 csharp 코드를보고 목록에서 항목을 찾아 삭제 한 후 루프를 종료해야하는 이유를 알 수 있는지 확인하십시오. 아이디어는 노드의 이웃 목록을 통해 노드 n이 있는지 확인한 다음 해당 이웃을 삭제하는 것입니다.foreach 루프에서 노드 삭제
internal void RemoveDirected(Node n)
{
foreach (EdgeToNeighbor etn in this.Neighbors)
{
if (etn.Neighbor.Key == n.Key)
{
RemoveDirected(etn);
break;
}
}
}
internal void RemoveDirected(EdgeToNeighbor e)
{
Neighbors.Remove(e);
}
. . .
// Removes EdgeToNeighbor instance from AdjacencyList
protected internal virtual void Remove(EdgeToNeighbor e)
{
base.InnerList.Remove(e);
}
첫 번째 방법에서 RemoveDirected 호출 후 "휴식"방법을 유의하십시오. 나는 RemoveDirected 후에 종료하지 않으면 foreach 루프에서 영원히 계속 될 것이라고 발견했습니다. 나는 그것이 foreach가 작동하는 방법과 관련이있는 이 있어야한다고 생각합니다. foreach가 작동하는 목록을 수정하면 혼동을 일으키고 계속 반복됩니다.
이 유형의 것을 보았으며 break를 사용하는 대신 사용할 다른 옵션은 무엇입니까? 물론 로컬 변수에서 찾은 노드를 루프에서 분리하고 루프 외부에서 삭제할 수 있습니다. 그러나 나는 생각하고있다, 이것을 할 수있는 더 좋은 방법이있을 수있다. csharp.
의견을 보내 주셔서 감사합니다. 제가 한 번 해보고 싶은 것은 여러분이 제안하고있는 해결책을위한 코드를 제공해주십시오. 코드 예제를 통해 확실히 추천할만한 내용을 명확하게 나타낼 수 있습니다. 미리 감사드립니다. –