gpt4 book ai didi

c# - 将 lambda 表达式用于事件处理程序的最佳实践

转载 作者:可可西里 更新时间:2023-11-01 08:22:14 24 4
gpt4 key购买 nike

在发现 lambda 表达式并将它们用作匿名函数之后,我发现自己编写了很多更琐碎的事件,例如:

txtLogin.GotFocus += (o, e) =>
{
txtLogin.Text = string.Empty;
txtLogin.ForeColor = SystemColors.ControlText;
};
txtLogin.LostFocus += (o, e) =>
{
txtLogin.Text = "Login...";
txtLogin.ForeColor = SystemColors.InactiveCaptionText;
};

我也放弃了只调用其他函数的事件处理程序,将它们替换为执行相同操作的小型 lambda:

backgroundWorker.DoWork += (o, e) => DatabaseLookup.Open(e.Argument as string);

我发现了一些解决 performance concerns 的类似问题并指出你 can't remove them ,但我还没有找到解决这是个好主意吗?

这个简单问题的方法

这样使用lambda算不算好形式,还是更有经验的程序员看不起这个?它是将事件处理程序隐藏在难以找到的地方,还是通过减少琐碎的事件处理程序的数量来编写服务代码?

最佳答案

这是一个完全合理的想法 - 但在这种特殊情况下,我会改用匿名方法:

txtLogin.LostFocus += delegate
{
txtLogin.Text = "Login...";
txtLogin.ForeColor = SystemColors.InactiveCaptionText;
};

好处是您不必指定参数 - 这让您更清楚地知道您没有使用它们。这是匿名方法相对于 lambda 表达式的唯一优势。

性能损失几乎总是可以忽略不计。如果您确实需要能够删除处理程序,那么事后无法删除它们是一个非常现实的问题,但我发现我经常这样做。 (Reactive Extensions 对此有一个很好的方法 - 当您订阅一个可观察序列时,您会得到一个 IDisposable ,如果您调用它,它将删除订阅。非常简洁。)

关于c# - 将 lambda 表达式用于事件处理程序的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3248218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com