L'inizializzazione dell'elenco con lambdas causa una complessità ciclomatica dell'IL: perché e come rimuovere questa complessità? Ad esempio il seguente codice fa sì che il costruttore statico della classe (che è in realtà generato dal compilatore) sia molto complesso: 1 + il numero di lista.Perché l'inizializzazione dell'elenco con lambda causa un'elevata complessità ciclomatica?
static List<Predicate<string>> list = new List<Predicate<string>>()
{
s => s == null,
s=> s.StartsWith(“R”),
... With a lot of predicates like that ….
};
Nota: la complessità viene calcolato con NDepend
In realtà se decompilo il codice e se capisco bene IL (sono un maniaco a riguardo), i lambda sembrano essere generati separatamente. Le filiali assomigliano più a un artefatto della generazione del codice del compilatore. – sthiers
Forse potresti aggiungere un breve estratto dell'IL decompilato, per noi che sono troppo pigri per correre a VS. Sono sorpreso se i lambdas non vengono effettivamente generati al punto dell'inizializzazione statica per contare sulla complessità del costruttore statico. –
L_0008: classe ldsfld Predicate'1 Foo.Class1 :: CS $ <> 9__CachedAnonymousMethodDelegate12 L_000d: brtrue.s L_0022 L_000f: ldnull L_0010: ldftn bool Foo.Class1 :: b__0 (string) L_0016: newobj esempio void [mscorlib] Predicate'1 :: ctor (oggetto, int nativo) L_001b:. classe stsfld [mscorlib] Predicate'1 Foo.Class1 :: CS $ <> 9__CachedAnonymousMethodDelegate12 L_0020: ampio s L_0022 L_0022: ldsfld class Predicate'1 Foo.Class1 :: CS $ <> 9__CachedAnonymousMethodDelegate12 L_0027: istanza callvirt void Generic.List'1 > :: Aggiungi (! 0) –
sthiers