【发布时间】:2010-04-23 08:21:31
【问题描述】:
有关于我编写的扩展方法的问题,如下所示:
public static IEnumerable<T> FindControlsOfType<T>(this ControlCollection instance) where T : class
{
T control;
foreach (Control ctrl in instance)
{
if ((control = ctrl as T) != null)
{
yield return control;
}
foreach (T child in FindControlsOfType<T>(ctrl.Controls))
{
yield return child;
}
}
}
public static IEnumerable<T> FindControlsOfType<T>(this ControlCollection instance, Func<T, bool> match) where T : class
{
return FindControlsOfType<T>(instance).Where(match);
}
这里的想法是在控件集合中找到所有符合特定条件的控件(因此是 Func<..>)。我的问题是:
第二种方法(具有Func)是否首先调用第一种方法以查找T类型的所有控件,然后执行where条件或“运行时”是否优化调用以对“整个”执行where条件" 枚举(如果你明白我的意思)。
其次,我是否可以对代码进行任何其他优化以更好地执行。
示例如下所示:
var checkbox = this.Controls.FindControlsOfType<MyCustomCheckBox>(
ctrl => ctrl.CustomProperty == "Test"
)
.FirstOrDefault();
【问题讨论】:
-
关于性能问题,不妨看看:msmvps.com/blogs/jon_skeet/archive/2010/03/25/…
-
正是我一直在寻找的东西——为我节省了一些时间,谢谢
标签: c# linq extension-methods yield-return