私がやりたいのは、ラムダ構文と「params」を組み合わせて、一連のオブジェクトに対してアクションを実行することです。
たくさんのコントロールを非表示にしたいとしましょう。
少しいじった後、私は拡張メソッドになりました:
public static void On<T>(this Action<T> actionToCarryOut,params T[] listOfThings)
{
foreach (var thing in listOfThings)
{
actionToCarryOut(thing);
}
}
次に、アクションを作成できます。
Action<Control> makeInvisible = c => c.Visible = false;
そしてそれを呼び出します:
makeInvisible.On(control1,control2, control3,control4);
ただし、これはあまり良い構文ではありません。ひどくぎこちなく感じます。
基本クラスに「Apply」メソッドを作成できます。
protected void Apply<T>(Action<T> action, params T[] appliedTo)
{
foreach (var item in appliedTo)
{
action(item);
}
}
そして、次のように呼び出します。
Apply<Control>(
c => c.Visible = false,
control1,
control2,
control3,);
しかし、それはメソッドを必要とするすべての基本クラスでメソッドを繰り返すことを意味し、型推論の利点を失います。
これを行うための不器用な方法はありますか?
編集:これまでに見た中で最も優れた方法は流暢なアプローチであり、(いくつかの調整を加えて)次のように書くことができます:
Apply.Method((Control c) => c.Visible = false).To(
control1,
control2,
control3,
control4};
単純な「foreach」を使用する場合の 107 文字と比較して、これは 91 文字です。結局のところ、「foreach」が実際には最良のアプローチであると私は信じています!