gpt4 book ai didi

c# - 递归检查接口(interface)的实现,c#

转载 作者:行者123 更新时间:2023-11-30 13:25:06 25 4
gpt4 key购买 nike

我在 WebForm 中遇到一种情况,我需要递归遍历控件树以找到实现给定接口(interface)的所有控件。

我该怎么做?

我试过写这样的扩展方法

public static class ControlExtensions
{
public static List<T> FindControlsByInterface<T>(this Control control)
{
List<T> retval = new List<T>();
if (control.GetType() == typeof(T))
retval.Add((T)control);


foreach (Control c in control.Controls)
{
retval.AddRange(c.FindControlsByInterface<T>());
}

return retval;
}
}

但它不喜欢在第 7 行转换为 T。我还考虑过尝试使用 as 运算符,但这不适用于接口(interface)。

我看到了Scott Hanselmans disucssion但无法从中收集到任何有用信息。

谁能给我指点。谢谢。

格雷格

最佳答案

我认为你需要把这个方法分成两部分

  1. 递归查找控件
  2. 根据#1 查找实现接口(interface)的控件

这是#1

public static IEnumerable<Control> FindAllControls(this Control control) {
yield return control;
foreach ( var child in control.Controls ) {
foreach ( var all in child.FindAllControls() ) {
yield return all;
}
}
}

现在要获取一个类型的所有控件,使用OfType扩展方法

var all = someControl.FindAllControls().OfType<ISomeInterface>();

关于c# - 递归检查接口(interface)的实现,c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com