あなたがすることができます:
public static void ForAllChildren(Action<Control> action,
params Control[] parents)
{
foreach(var p in parents)
foreach(Control c in p.Controls)
action(c);
}
次のように呼び出されます:
ForAllChildren(x => Foo(x), tb_Invoices, tb_Statements);
アクション呼び出しのパフォーマンスが少し低下する可能性がありますが、その場合はネストされた を使用できますforeach
:
foreach (var p in new Control[] { tb_Invoices, tb_Statements })
foreach (Control c in p.Controls)
Foo(c);
同様に、非ジェネリックのすべてのアイテムをループする一般的な解決策は次のIEnumerable
ようになります (ただし、ハンマーを使用して釘を打ち込むのに少し似ています)。
public static void ForEachAll<T>(Action<T> action,
params System.Collections.IEnumerable[] collections)
{
foreach(var collection in collections)
foreach(var item in collection.Cast<T>())
action(item);
}
次のように呼び出されます:
ForEachAll<Control>(x => Foo(x), tb_Invoices.Controls, tb_Statements.Controls);