0

我有一个包含许多控件的 .aspx 页面。

我想递归搜索 Page.Controls 集合。

我自己添加的 UserControl 有一个接口 IUserControl。

使用此扩展方法:

public static T FindNodeInHierarchy<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> childrenSelector, Predicate<T> condition)
        {
            // return default wenn keine Items existieren
            if (source == null || !source.Any()) return default(T);

            // return result wenn item gefunden und hört auf die Liste durchzugehen
            var attempt = source.FirstOrDefault(t => condition(t));
            if (!Equals(attempt, default(T))) return attempt;

            // Ruft die Funktion auf eine Liste auf bis runter in alle Unterlisten bis das
            // entsprechende Objekt gefunden ist.
            return source.SelectMany(childrenSelector).FindNodeInHierarchy(childrenSelector, condition);
        }

当我尝试这样的事情时,我得到了一个异常的记忆:

 var query = Page.Controls
                .Cast<Control>()
                .FindNodeInHierarchy<Control>(c => Page.Controls.Cast<Control>(), c => c is IUserControl);

我也尝试过.OfType<IUserControl>()

但后来我得到空值返回。

如何使用放置在某处的 IUserControl 接口获取此 UserControl

网站?

4

1 回答 1

1
public IEnumerable<TControl> FindControls<TControl>(Control c)
{
    var tc = c as TControl;
    if (tc != null)
        yield return tc;

    foreach (var cc in c.Controls)
    {
        foreach (var res in FindControls<TControl>(cc))
            yield return res;
    }
}

您可以通过传递要搜索的根控件来调用它,例如

var myuc = FindControls<IUserControl>(Page);
于 2012-11-14T19:42:45.923 回答