回答
这里没有什么可以解决的。 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