2009-06-06 9 views
0

次のコードスニペットはSilverlight SDKのものですが、その理由を理解しようとしています。 誰でもforループの必要性について説明できますか?Silverlight SDKソースコードのこのメソッドの目的は何ですか?

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; 
     } 

答えて

2

親子であるかFrameworkElementでない要素を探していて、ツリーを歩いています。ループは、未処理の末尾再帰です。しばらくの間(本当の)ループもうまくいきました。

1

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

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

関連する問題