在操作.All()和.TrueForAll()操作之间是否存在实际差异List?我知道这.All()是其中的一部分IEnumerable,为什么要添加.TrueForAll()?
Jon*_*eet 47
来自以下文档List<T>.TrueForAll:
支持:4,3.5,3.0,2.0
所以之前 添加了它Enumerable.All.
对于一系列List<T>与LINQ对应方类似的其他方法也是如此.请注意,这ConvertAll有点不同,因为它具有知道它正在工作List<T>并创建一个的优点List<TResult>,因此它可以预先分配它需要的任何东西.
小智 13
很抱歉挖出这个问题,但我遇到了这个问题,并且发现有关差异的实际问题没有得到正确的回答。
差异是:
IEnumerable.All()方法对扩展对象进行额外的检查(如果它为空,则会抛出异常)。IEnumerable.All()可能不会按顺序检查元素。理论上,规范允许每次调用时以不同的顺序检查项目。在文档List.TrueForAll()中指定它将始终按列表的顺序排列。第二点是因为Enumerable.All必须使用 aforeach或 theMoveNext()方法来迭代项目,而List.TrueForAll()内部使用for带有列表索引的循环。
但是,您也可以非常确定foreach/MoveNext()方法将按照列表条目的顺序返回元素,因为许多程序都希望这样做,并且如果将来更改它,就会中断。
从性能的角度来看,List.TrueForAll()应该更快,因为它少了一次检查,并且for在列表上比foreach. 然而,编译器通常做得很好,并在这里进行了很多优化,因此最终可能(几乎)没有可测量的差异。
结论:理论上List.TrueForAll()是更好的选择。但实际上,这没有什么区别。
TrueForAll 在LINQ用于.NET 3.5之前,存在于.NET 2.0中.
请参阅:http://msdn.microsoft.com/en-us/library/kdxe4x4w(v = VS.80).aspx
| 归档时间: |
|
| 查看次数: |
10502 次 |
| 最近记录: |