递归函数,用于查找泛型类型中的用户控件
本文关键字:用户 控件 泛型类型 用于 查找 递归函数 | 更新日期: 2023-09-27 18:01:00
这是我的代码
private void FindControls<T>(Control control, List<T> list)
{
foreach (Control c in control.Controls)
{
if (c != null)
{
if (c is T)
{
list.Add(c); //<-- Problem is here
}
else
{
FindControls<T>(c, list);
}
}
}
}
我收到的消息
"的最佳过载匹配"System.Collection.Generic.List.Add(T("包含一些无效参数">
这是另一种找到特定控制的方法
private void MyMethod(Employee e)
{
List<MyUserControlType> employees = new List<MyUserControlType>();
this.FindControls<MyUserControlType>(this.MyControlRoot, employees);
foreach (var employee in employees)
{
....
}
}
我想返回一个MyUserControlType类型的控件列表,它不是从Control类型继承的。从UserControl 继承
我该如何解决此问题?
您可以使用类似的as
运算符进行强制转换
if (c is T)
{
list.Add((c as T)); //<-- Problem is here
}
可以通过修改方法定义来设置该约束
private void FindControls<T>(Control control, List<T> list) where T : class
{
(OR(正如@Ivan在评论中指出的那样,您可以使用强制转换运算符直接强制转换它,这不需要您在方法中放置泛型约束
if (c is T)
{
list.Add((T)c); //<-- Problem is here
}