abbiamo questo codice, sortof: analisiCome può la complessità ciclomatica essere 27 in un metodo con 13 sottoscrizioni di gestori di eventi?
private void InitializeEvents()
{
this.Event1 += (s,e) => { };
this.Event2 += (s,e) => { };
this.Event3 += (s,e) => { };
this.Event4 += (s,e) => { };
this.Event5 += (s,e) => { };
this.Event6 += (s,e) => { };
this.Event7 += (s,e) => { };
this.Event8 += (s,e) => { };
this.Event9 += (s,e) => { };
this.Event10 += (s,e) => { };
this.Event11 += (s,e) => { };
this.Event12 += (s,e) => { };
this.Event13 += (s,e) => { };
}
Codice in VS10 finale dice: "la complessità ciclomatica di 27". Rimozione di una delle linee rende la complessità ciclomatica 25.
Non ci sono ramificazioni in corso, quindi come è possibile?
+1 per "Ricordare che l'analisi del codice sta esaminando l'IL nel proprio assieme, non il codice sorgente. Non c'è nulla nell'IL che supporti nativamente le espressioni lambda" – Lijo
Lambdas/delegati sono SOLO CACCATI SE non c'è chiusura sopra di loro. Altrimenti, non lo sono. Questo è uno dei motivi (di più) lambda sono costosi. Ci sono anche JIT, allocazione e GC coinvolti - ma questo è per un'altra discussione. Ho risolto più problemi di prestazioni relativi a lambda con chiusure in metodi "caldi" che posso contare. –