使用C#以递归方式从controlcollection中获取控件集合

目前,我正在尝试从递归控件集合(转发器)中提取动态创建的控件(复选框和下拉列表)的集合.这是我正在使用的代码.

private void GetControlList<T>(ControlCollection controlCollection, ref List<T> resultCollection)
{
    foreach (Control control in controlCollection)
    {
        if (control.GetType() == typeof(T))
            resultCollection.Add((T)control);

        if (control.HasControls())
            GetControlList(controlCollection, ref resultCollection);
    }
}

我遇到以下问题:

resultCollection.Add((T)control);

我收到错误……

Cannot convert type 'System.Web.UI.Control' to 'T'

有任何想法吗?

问题:

由于T可以是引用类型或值类型,因此编译器需要更多信息.

您无法转换和整数控制.

解:

要解决此问题,请添加T:Control或其中T:class(更一般)约束,以声明T始终是引用类型.

例:

private void GetControlList<T>(ControlCollection controlCollection, ref List<T> resultCollection)
where T : Control
{
    foreach (Control control in controlCollection)
    {
        //if (control.GetType() == typeof(T))
        if (control is T) // This is cleaner
            resultCollection.Add((T)control);

        if (control.HasControls())
            GetControlList(control.Controls, ref resultCollection);
    }
}

>您也不需要ref关键字.由于List是一个引用类型,它的引用将被传递.

https://stackoverflow.com/questions/4463319/using-c-sharp-to-recursively-get-a-collection-of-controls-from-a-controlcollecti

转载注明原文:使用C#以递归方式从controlcollection中获取控件集合