Supponiamo Ho il seguente pezzo di codice:LINQ in condizioni di loop
IEnumerable<string> allKeys = _cache.Select(o => o.Key);
Parallel.ForEach(allKeys, key => _cache.Remove(key));
Come potete vedere, sto recuperando tutte le chiavi _cache
, la loro memorizzazione nella mia variabile locale allKeys
, e quindi in concomitanza rimuovendo tutte le chiavi da _cache
.
Vorrei, tuttavia, farlo un'unica riga. Quindi, quello che viene in mente è:
Parallel.ForEach(_cache.Select(o => o.Key), key => _cache.Remove(key));
Ma la dichiarazione _cache.Select(o => o.Key)
sarebbe chiamato su ogni iterazione del ciclo, quindi, il recupero di diverse quantità di elementi ogni volta (perché io li sto eliminando allo stesso tempo).
L'ultima riga di codice è sicura?
Nelle istruzioni loop, _cache.Select(o => o.Key)
, viene richiamato una sola volta, quindi ogni iterazione utilizza il risultato originale o viene elaborato in ogni fase di iterazione?
Che tipo è _cache? – Paddy
Quale sarebbe il vantaggio di farlo in una singola riga? –
_ "Ma l'istruzione _cache.Select (o => o.Key) verrebbe chiamata su ogni ciclo iterativo" _ - sei sicuro? – CodeCaster