2009-06-06 3 views
0

Следующий фрагмент кода из SDK Silverlight, и я пытаюсь понять причину, по которой это так. Может ли кто-нибудь объяснить необходимость цикла 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. Цикл представляет собой развернутую хвостовую рекурсию. Конец while (true) тоже был бы прекрасен.

1

Возможно, это стиль Microsoft, определяющий бесконечный цикл.

Петля будет проходить через каждого родителя, пока она не будет выполнена.

Смежные вопросы