回答
這裏沒有什麼可以解決的。 Any()
將迭代枚舉,但在第一個元素之後停止(之後它返回true)。
多枚舉主要是在兩種情況下一個問題:
性能:一般來說,你想避免多次重複,如果你 可以,因爲它是慢。這不適用於此,因爲
Any()
將 只是確認至少有一個元素,並且是您需要的檢查。此外,您並未訪問任何遠程/外部資源,只是內存順序。不能迭代多次的枚舉:例如, 從網絡等接收項目 - 也不適用於此。
作爲非LINQ的版本,只需要遍歷一旦你可以做到以下幾點:
bool foundAny= false;
bool isEqual = true;
if(f == null)
throw new ArgumentException();
foreach(var check in f)
{
foundAny = true;
isEqual = isEqual && check(p,p2);
}
if(!foundAny)
throw new ArgumentException();
return isEqual;
但是,如前所述,在你的情況下,它不會有所作爲,而我將與更易讀的版本一起使用。
如果這是一個數據庫查詢它會執行兩次,通常完全。 – usr 2012-03-03 20:27:19
@usr:同意,我補充說,對於第一種情況 - 無論是遠程/外部資源還是內存中順序 – BrokenGlass 2012-03-03 20:30:18
如果Any
方法沒有其他方法來確定結果,則可以導致IEnumerable<T>
的枚舉。在某些情況下,它可能是一個問題,例如,如果IEnumerable<T>
實例實際上是一個IQueryable<T>
,將導致執行數據庫查詢或Web服務調用。現在,如果它只是一個內存中的集合,這不是一個真正的問題,因爲枚舉集合不會有明顯的副作用。無論如何,Any
將使用Count
屬性,如果序列執行ICollection<T>
,所以它不會導致枚舉。
- 1. IEnumerable的多次枚舉
- 2. IEnumerable的多個枚舉器
- 3. 即使「IsNullOrEmpty」檢查也給出了「IEnumerable可能的多次枚舉」警告
- 4. C#:枚舉IEnumerable的循環枚舉
- 5. 這不會導致IEnumerable的多次枚舉?
- 6. 爲其他類型配置ReSharper的「可能的多次枚舉」
- 7. 枚舉所有IEnumerable事件
- 8. Java:多次使用枚舉
- 9. 如何創建無法枚舉多個枚舉的IEnumerable <T>?
- 10. IEnumerable的 - 的foreach - 一個查詢的結果不能枚舉不止一次
- 11. Resharper警告關於「可能的多枚舉」的枚舉的所有*用法
- 12. 用於IEnumerable枚舉的轉換器
- 13. 可可枚舉
- 14. C++ - 程序中的多枚舉枚舉
- 15. LINQ的可枚舉<T> .ElementAt =>的IEnumerable <T>
- 16. PHP枚舉層次
- 17. 是否有可能有兩個或多個單詞枚舉枚舉類?
- 18. EF Code-First - 存儲IEnumerable枚舉
- 19. IEnumerable列表脫離枚舉值
- 20. 查詢的結果不能枚舉多次。
- 21. 是多次函數類遞歸枚舉?
- 22. 不能枚舉
- 23. 是否有可能在enum中枚舉枚舉?
- 24. 不能轉換UserQuery枚舉枚舉
- 25. $。每次在枚舉JQuery的
- 26. 爲什麼枚舉包括可枚舉
- 27. 可以枚舉包含其他枚舉?
- 28. 是否將Entity Framework對象中的虛擬IList枚舉爲IEnumerable枚舉?
- 29. ReSharper:可能的NullReferenceException與枚舉器?
- 30. 枚舉所有可能的字符
除了最終的截圖和文本以外,所有內容都只是分散了真正的問題。 – usr 2012-03-03 20:19:26
這與http://stackoverflow.com/q/7244178/219583非常相似。任何()將作爲第二個枚舉和Aggregate()。 – 2012-03-03 20:20:43
請勿將代碼張貼爲截圖 - 將源代碼粘貼到問題中。 – Joe 2012-03-03 20:25:37