在发现lambda表达式及其作为匿名函数的用法之后,我发现自己编写了许多更为琐碎的事件,例如:
txtLogin.GotFocus += (o, e) =>
{
txtLogin.Text = string.Empty;
txtLogin.ForeColor = SystemColors.ControlText;
};
txtLogin.LostFocus += (o, e) =>
{
txtLogin.Text = "Login...";
txtLogin.ForeColor = SystemColors.InactiveCaptionText;
};
Run Code Online (Sandbox Code Playgroud)
我也离开了只调用其他函数的事件处理程序,用小lambda代替它们:
backgroundWorker.DoWork += (o, e) => DatabaseLookup.Open(e.Argument as string);
Run Code Online (Sandbox Code Playgroud)
我发现了一些类似的问题来解决性能问题,并指出你无法删除它们,但我还没有发现任何解决这个简单问题的问题这是个好主意吗?
使用lambdas是否被认为是一种良好的形式,或者更多的经验是程序员瞧不起这个?它是否在难以找到的位置隐藏事件处理程序,还是通过减少普通事件处理程序的数量来使代码成为服务?
Jon*_*eet 16
这是一个非常合理的想法 - 但在这种特殊情况下,我会使用匿名方法:
txtLogin.LostFocus += delegate
{
txtLogin.Text = "Login...";
txtLogin.ForeColor = SystemColors.InactiveCaptionText;
};
Run Code Online (Sandbox Code Playgroud)
好处是您不必指定参数 - 这使您更清楚地知道不使用它们.这是匿名方法对lambda表达式的唯一优势.
性能影响几乎总是可以忽略不计.如果你确实需要能够删除处理程序,那么之后无法删除它们是一个非常现实的问题,但我发现通常我不这样做.(Reactive Extensions对此有一个很好的方法 - 当你订阅一个可观察的序列时,IDisposable如果你调用它,你将被退回一个将删除订阅.非常整洁.)
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |