Nehmen wir an, ich das folgende Stück Code haben:LINQ auf Schleifenbedingungen
IEnumerable<string> allKeys = _cache.Select(o => o.Key);
Parallel.ForEach(allKeys, key => _cache.Remove(key));
Wie Sie sehen können, bin ich das Abrufen alle Schlüssel in _cache
, sie in meinem lokalen Variablen speichern allKeys
, und dann gleichzeitig Entfernen aller Schlüssel von _cache
.
Ich möchte jedoch, es eine einzige Zeile zu tun. Also, was in den Sinn kommt ist:
Parallel.ForEach(_cache.Select(o => o.Key), key => _cache.Remove(key));
Aber die Aussage _cache.Select(o => o.Key)
würde auf jeder Schleife Iteration aufgerufen werden, damit unterschiedliche Menge von Elementen jedes Mal Abrufen (weil ich sie zur gleichen Zeit bin zu löschen).
Ist die letzte Codezeile sicher?
Wird _cache.Select(o => o.Key)
in Schleifenanweisungen nur einmal aufgerufen, und dann verwendet jede Iteration das ursprüngliche Ergebnis oder wird es in jedem Iterationsschritt verarbeitet?
Welcher Typ ist _cache? – Paddy
Was wäre der Vorteil, dies in einer einzigen Zeile zu tun? –
_ "Aber die Anweisung _cache.Select (o => o.Key) würde bei jeder Schleifeniteration aufgerufen werden" _ - bist du sicher? – CodeCaster