2011-01-10 7 views
2

シルバーInkPresenterのバグです操作ではありませんオブジェクトの現在の状態のために有効です。 だから私は思うしていたし、コードの追加の行を追加:が、これはここでは、コードの自己説明的作品だ

foreach (UIElement item in myInkPresenter.Children) 
{ 
    myInkPresenter.Children.Remove(item); 
    if (myInkPresenter.Children.Count == 0) break; 
} 

をし、今では正常に動作します。

私の質問はこれはバグですか、何らかの理由でこの動作が必要なのでしょうか?

答えて

4

あなたのコードは子供が1人しかいない場合にのみ機能します。さらに次のアイテムが見つかると、内部コレクションが変更されたことに気づき、イテレータを無効にします。

これは、InkPresenter自体とは関係がありません。ほとんどすべての.NETのコレクションはそのように機能します。基本的には、反復処理中にコレクションを変更しないでください。 (.NET 4での同時コレクションは、この規則の例外の顕著なセットです。)

あなただけの子のリストをクリアすることを考えると、なぜ呼び出すだけではない:

myInkPresenter.Children.Clear(); 

?よりシンプルで、読みやすく、効率的です。

+0

私はそれが気づかなかったとは思いません。とても良い。 – descf

関連する問題