本文介绍了通用所有的方法控制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
也想不出更好的标题,所以appologies ..
我想转换,这将检索一个表单的所有子控件,是一个延伸方法以及接受接口为输入。到目前为止,我最多
公开的IEnumerable<控制> GETALL< T>(这种控制的控制),其中T:类
{
无功控制= control.Controls.Cast<控制>(); 返回controls.SelectMany(CTRL =>&GETALL LT; T>(CTRL))
.Concat(对照)
。凡(C => c为T);
}
这工作正常但我需要添加 OfType< T>()
调用它的时候去其属性访问
例如(此==表格)
this.GetAll< IMyInterface的>()OfType< IMyInterface的>()
我努力使返回类型为一个通用的返回类型的IEnumerable< T>
,这样我就不必包含 OfType
这将只返回相同的结果,但正确地投。
任何人有什么建议吗?
(改变返回类型为的IEnumerable< T>
引起的毗连
扔
解决方案
The problem is that Concat
would want an IEnumerable<T>
as well - not an IEnumerable<Control>
. This should work though:
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>()));
}
这篇关于通用所有的方法控制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!