讓我們假設我有以下一段代碼:LINQ環路條件
IEnumerable<string> allKeys = _cache.Select(o => o.Key);
Parallel.ForEach(allKeys, key => _cache.Remove(key));
正如你所看到的,我檢索所有的鑰匙,_cache
,將它們存儲在我的本地變量allKeys
,然後同時從_cache
刪除所有的密鑰。
但是我想要做到這一點。那麼,什麼想到的是:
Parallel.ForEach(_cache.Select(o => o.Key), key => _cache.Remove(key));
但聲明_cache.Select(o => o.Key)
會被要求每次循環迭代,因此檢索每個時間不同量元素的(因爲我在同一時間刪除)。
後面的代碼行是否安全?
_cache.Select(o => o.Key)
在循環語句中,只調用一次,然後每個迭代使用原始結果,還是在每個迭代步驟中處理?
什麼類型是_cache? – Paddy
在單行中做這件事會有什麼好處? –
_「但是每個循環迭代都會調用_cache.Select(o => o.Key)語句」_ - 你確定嗎? – CodeCaster