Custom method "GetControlsOfType" seems to be going up Control structure as well as down
<p>I have a custom method GetControlsOfType that looks like this:</p>

<pre><code>public static List&lt;TControl&gt; GetControlsOfType&lt;TControl&gt;(this Control control) where TControl : Control
    {
        return (from n in control.Controls.Cast&lt;Control&gt;().Descendants(c =&gt; c.Controls.Cast&lt;Control&gt;())
                where n is TControl
                select (TControl)n).ToList();
    }
</code></pre>

<p>It depends on this extension:  </p>

<pre><code>static public IEnumerable&lt;T&gt; Descendants&lt;T&gt;(this IEnumerable&lt;T&gt; source,
                                                Func&lt;T, IEnumerable&lt;T&gt;&gt; DescendBy)
    {
        foreach (T value in source)
        {
            yield return value;

            foreach (T child in DescendBy(value).Descendants&lt;T&gt;(DescendBy))
            {
                yield return child;
            }
        }
    }
</code></pre>

<p>If I have a control structure like this (RadEditor is just a Telerik control for making rich text):</p>

<pre><code>MyWebPage.aspx  
- MyUserControl1.ascx  
  - MyRadEditor1  
- MyUserControl2.ascx  
  - MyRadEditor2  
</code></pre>

<p>If MyUserControl2.ascx calls the method below, I see both MyRadEditor1 and 2.</p>

<pre><code>public static void SetRadEditors(this UserControl control, object entity)
    {
        control.GetControlsOfType&lt;RadEditor&gt;().ForEach(editor =&gt;
        {
            // Should only show MyRadEditor2, but shows MyRadEditor1 and MyRadEditor2
        });
    }
</code></pre>

<p>Can anyone help me understand why this occurs?</p>
