Встраивание больших функций может сделать программу больше, приведя к большему количеству неудачных обращений в кэш и делая его медленнее.
Решение, когда функция является достаточно небольшой, что встраивание увеличит производительность, довольно хитро. Руководство по стилю C++ Google рекомендует только встроить функции 10 строк или меньше.
Вот довольно наивный метод расширения: -
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i=0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendent in Descendents(child))
yield return descendent;
}
}
}
У этого подхода есть недостаток, заключающийся в том, что он не предполагает никаких изменений происходят в членстве в дереве, пока оно выполняется. Это можно смягчить при использовании ToList ().
Теперь вы можете выполнять свои требования с помощью LINQ: -
var qryAllButtons = myPanel.Descendents().OfType<Button>();