このcsharpコードを見て、リストから項目を見つけて削除した後にループを終了する必要がある理由を知ることができるかどうかを確認してください。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);
}
:アイデアは隣人のノードのリストを通過し、ノードnが存在するかどうかを確認し、その隣人を削除することです。 。 。
// Removes EdgeToNeighbor instance from AdjacencyList
protected internal virtual void Remove(EdgeToNeighbor e)
{
base.InnerList.Remove(e);
}
私は最初の方法でRemoveDirected呼び出し後に「休憩」を持っているかに注意してください。 私は、RemoveDirectedの後に終了しないと、 がforeachループで永遠に続行されることがわかりました。私はそれが foreachが動作する方法と関係がなければならないと思います。 foreachが動作しているリスト を変更すると、混乱とループが永遠に起こります。
あなたはこのタイプのものを見たことがありますか?そして、breakを使用するのではなく、他のオプションは何ですか? もちろん、私が見つけたノードをローカル変数に置き、ループから外して、 ループ外でそれを削除することができます。しかし、私は思っていた、これを行うより良い方法があるかもしれない csharpで。
フィードバックをお寄せいただきありがとうございます。私が作りたいのは、あなたが提案している解決策のコードを提供してください。コード例は、間違いなくあなたが推薦しているものをより明確にします。前もって感謝します。 –