有一天,在我的公用事業公司之一,ReSharper的暗示我一下下面指出的λ定義委託ThreadStart
的一段代碼可以變成一個本地函數:C#7本地函數相比lambdas有什麼好處?
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();
}
}
後者對前者有什麼好處,僅僅是關於性能?
我已經檢查了以下資源,但在我的例子好處不是很明顯:
- https://asizikov.github.io/2016/04/15/thoughts-on-local-functions/
- https://www.infoworld.com/article/3182416/application-development/c-7-in-depth-exploring-local-functions.html
我想說接近,因爲它是基於意見。但這是一個非常有趣的問題。 :-) –
本地函數支持在一行中遞歸,而lambda需要做一些小技巧來做到這一點,它們在捕獲閉包時也不會像lambdas一樣創建垃圾。 –
@AlKepp這不是基於**的意見,問題是關於本地功能的好處,否則爲什麼他們甚至會引入本地功能。如果OP詢問你喜歡什麼,問題將基於意見。顯然它不是。 –