我想要做的是将 lambda 语法与“参数”结合起来对一系列对象执行操作。
假设我想让一堆控件不可见。
经过一番摆弄,我最终得到了一个扩展方法:
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);
虽然这不是很好的语法 - 感觉非常笨拙。
我可以在我的基类中创建一个“应用”方法:
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};
这是 91 个字符,而使用简单的“foreach”则为 107 个字符。这让我相信“foreach”实际上可能是最好的方法!