C# 用于查找泛型类型中的用户控件的递归函数
这是我的密码C# 用于查找泛型类型中的用户控件的递归函数,c#,list,generics,recursion,C#,List,Generics,Recursion,这是我的密码 private void FindControls<T>(Control control, List<T> list) { foreach (Control c in control.Controls) { if (c != null) { if (c is T) {
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);
}
}
}
}
private void find控件(控件控件,列表)
{
foreach(Control.Controls中的控件c)
{
如果(c!=null)
{
if(c是T)
{
list.Add(c);//您可以像操作符一样使用来强制转换它
if (c is T)
{
list.Add((c as T)); //<-- Problem is here
}
if(c是T)
{
list.Add((c as T));//您可以使用as
操作符来强制转换它
if (c is T)
{
list.Add((c as T)); //<-- Problem is here
}
if(c是T)
{
list.Add((c as T));//我已经试过了,但是我得到了:“类型参数'T'不能与'as'运算符一起使用,因为它既没有类类型约束,也没有'class'约束”为什么as T
而不是cast(T)
?@IvanStoev,有意义,但因为它处于条件if(c是T)
将转换为不会有问题。我知道这是安全的:)我只是好奇你为什么首先选择那个,这反过来要求你添加约束。而另一个可以不受约束地工作。@IvanStoev,嗯,这是在发布答案时想到的,但是的,很好,谢谢你。包括这一点。我是L已经尝试过了,但我得到了:“类型参数'T'不能与'as'运算符一起使用,因为它既没有类类型约束,也没有'class'约束”为什么as T
而不是cast(T)
?@IvanStoev,这是有意义的,但因为它处于条件if(c是T)下
将转换为不会有问题。。我知道这是安全的:)我只是好奇,为什么你一开始就选择了那个,这反过来又需要你添加约束。而另一个可以不受约束地工作。@IvanStoev,嗯,这是我在发布答案时想到的,但是的,很好,谢谢你。包括这一点。你呢你必须把C投给T。
private void FindControls<T>(Control control, List<T> list) where T : class
{
if (c is T)
{
list.Add((T)c); //<-- Problem is here
}