本文介绍了通用所有的方法控制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

也想不出更好的标题,所以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>()));
}

这篇关于通用所有的方法控制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 12:58