void DoSomething() {
foreach(var button in GetButtonNs()) {
DoSomething(button);
}
}

IEnumerable<Button> GetButtonNs() {
var reg = new Regex("^button\d+$", RegexOptions.Compiled);
return GetControls().OfType<Button>().Where(b => reg.IsMatch(b.Name));
}

static IEnumerable<Control> GetControls(Control parent) {
if (parent != null) {
yield return parent;
foreach (var child in parent.Controls) {
foreach (var descendant in GetControls(child)) {
yield return descendant;
}
}
}
}