получил вопрос относительно метода расширения, который я написал, который выглядит следующим образом:
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();