2009-06-06 3 views
0

L'extrait de code suivant provient du SDK Silverlight et j'essaie de comprendre la raison pour laquelle il est tel qu'il est. Quelqu'un peut-il expliquer le besoin de la boucle for?Quel est le but de cette méthode dans le code source de 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; 
     } 

Répondre

2

C'est en remontant l'arbre à la recherche de n'importe quel élément qui soit sans parent ou pas un FrameworkElement. La boucle est une récursion de queue déroulée. Une boucle while (true) aurait été bien aussi.

1

C'est probablement le style Microsoft qui définit la boucle infinie.

La boucle traversera chaque parent jusqu'à ce qu'elle ne puisse pas être lancée.