【发布时间】:2017-10-09 22:44:24
【问题描述】:
前几天在我的一个实用程序中,ReSharper 向我暗示了下面的一段代码,说明定义委托 ThreadStart 的 lambda 可以转换为本地函数:
public void Start(ThreadPriority threadPriority = ThreadPriority.Lowest)
{
if (!Enabled)
{
_threadCancellationRequested = false;
ThreadStart threadStart = () => NotificationTimer (ref _interval, ref _ignoreDurationThreshold, ref _threadCancellationRequested);
Thread = new Thread(threadStart) {Priority = ThreadPriority.Lowest};
Thread.Start();
}
}
因此转化为:
public void Start(ThreadPriority threadPriority = ThreadPriority.Lowest)
{
if (!Enabled)
{
_threadCancellationRequested = false;
void ThreadStart() => NotificationTimer(ref _interval, ref _ignoreDurationThreshold, ref _threadCancellationRequested);
Thread = new Thread(ThreadStart) {Priority = ThreadPriority.Lowest};
Thread.Start();
}
}
后者比前者有什么好处,只是性能方面的吗?
我已经检查了下面的资源,但在我的示例中,好处并不那么明显:
【问题讨论】:
-
我会说接近,因为它是基于意见的。但这是一个非常有趣的问题。 :-)
-
局部函数在一行中支持递归,使用 lambdas 你必须做一些小技巧才能做到这一点,它们也不会像 lambdas 在捕获闭包时那样创建垃圾。
-
@AlKepp 这是不基于意见的,问题询问本地功能的好处,否则他们为什么还要引入本地功能。如果 OP 询问您更喜欢哪个,问题将基于意见。显然不是。
-
@M.kazemAkhgary 哦,我没想到,有道理,这可能是一个大专业。