L'autre jour, dans un de mes services, ReSharper me a laissé entendre sur le morceau de code ci-dessous indiquant que lambda définissant le délégué ThreadStart
peut être transformé en une fonction locale:Quels sont les avantages des fonctions locales C# 7 par rapport à 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();
}
}
Et donc transformé en:
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();
}
}
Quels sont les avantages de ces derniers par rapport aux premiers, ne s'agit-il que de performances?
je l'ai déjà vérifié les ressources ci-dessous, mais dans mon exemple, les avantages ne sont pas si évident:
- 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
je dirais que près parce qu'elle est fondée sur des opinions. Mais c'est une question vraiment intéressante. :-) –
les fonctions locales supportent la récursion en une ligne, avec lambdas vous devez faire un petit truc pour le faire, elles ne créent pas non plus de détritus comme le font les lambdas lors de la capture des fermetures. –
@AlKepp c'est ** pas ** basé sur l'opinion, la question se pose sur les avantages des fonctions locales, sinon pourquoi auraient-ils même introduit la fonction locale. question serait fondée sur l'opinion si OP demandaient ce que vous préférez. il est clair que non. –