看看這個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調用後有一個「break」。 我發現如果我在RemoveDirected 後沒有退出,它會在foreach循環中永遠持續下去。我認爲它必須有與foreach工作的方式有關的事情 。如果修改foreach正在處理的列表 ,它會變得混亂並永遠循環。
你見過這種類型的東西嗎?還有什麼其他的選擇可以使用而不是使用break? 當然,我可以將我找到的節點放置在局部變量中,然後從循環中斷開,並將其刪除到循環外。但我在想,可能有更好的方法在csharp中做這個 。
謝謝大家提供您的反饋意見,非常感謝。我希望提出的一個要求是,請爲您提供的解決方案提供代碼。一個代碼示例肯定會讓你更清楚你推薦的內容。提前致謝。 –