0

次のコードスニペットはSilverlightSDKからのものであり、その理由を理解しようとしています。for誰かがループの必要性を説明できますか?

 internal static DependencyObject GetVisualRoot(DependencyObject d)
        { 
            DependencyObject root = d; 
            for (; ; )
            { 
                FrameworkElement element = root as FrameworkElement;
                if (element == null)
                { 
                    break;
                }

                DependencyObject parent = element.Parent as DependencyObject; 
                if (parent == null)
                { 
                    break;
                }

                root = parent;
            }
            return root; 
        } 
4

2 に答える 2

2

ツリーを上って、親がないか、FrameworkElementではない要素を探します。ループは展開された末尾再帰です。while(true)ループも問題ありませんでした。

于 2009-06-06T22:10:27.597 に答える
1

これはおそらく、無限ループを定義するMicrosoftスタイルです。

ループは、キャストに失敗するまで各親をトラバースします。

于 2009-06-06T22:08:29.427 に答える