Generic All Controls Method
本文关键字:Method Controls All Generic | 更新日期: 2023-09-27 18:20:57
想不出比这更好的标题了。。
我正在尝试将这个方法转换为一个扩展方法,并接受接口作为输入,该方法将检索表单的所有子控件。到目前为止,我在
public IEnumerable<Control> GetAll<T>(this Control control) where T : class
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll<T>(ctrl))
.Concat(controls)
.Where(c => c is T);
}
除了在调用它以访问其属性时需要添加CCD_ 1之外,它工作得很好。
例如(此==形式)
this.GetAll<IMyInterface>().OfType<IMyInterface>()
我正在努力将返回类型转换为通用返回类型IEnumerable<T>
,这样我就不必包含OfType
,它只会返回相同的结果,但转换正确。
有人有什么建议吗?
(将返回类型更改为IEnumerable<T>
会导致Concat
抛出
实例参数:无法从"System.Collections.Generic.IEnumerable
<T>
"转换为"System.Linq.ParallelQuery<System.Windows.Forms.Control>
"
问题是Concat
也想要IEnumerable<T>
,而不是OfType<T>()
0。这应该是可行的:
public static IEnumerable<T> GetAll<T>(this Control control) where T : class
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll<T>(ctrl))
.Concat(controls.OfType<T>()));
}