2007年1月27日作成

foreachでノードを削除すると、1つ飛ばしに残る

C#のTreeNodeCollection。 以下のプログラムだと、削除した結果1つずれますが、 さらにforeachでひとつ進めるので、 結果として偶数ぶんは残ってしまうのです。

TreeNodeCollection p;
..
foreach(TreeNode q in p)
	p.Remove(q);

全部消すならこちら。

while(p.Count > 0)
	p.Remove(p[0]);

条件付き削除の場合はこのように。

int nskip = 0;
while(nskip < p.Count)
	if(...)
		p.Remove(p[nskip]);
	else
		nskip++;