有人可以解释LINQ函数Where(..)和FindAll(..)有何不同?他们似乎都做同样的事情......
Ada*_*son 195
FindAll()是List<T>类型的函数,它不是LINQ扩展方法Where.LINQ扩展方法适用于任何实现的类型IEnumerable,而FindAll只能用于List<T>实例(或者从它继承的类的实例).
另外,它们的实际目的不同.Where返回IEnumerable枚举对象时按需执行的实例.FindAll返回List<T>包含所请求元素的新内容.FindAll更像是调用Where(...).ToList()一个实例IEnumerable.
cfe*_*ern 10
对我来说最大的不同是.FindAll也可以在.Net 2.0中使用.我并不总是可以在.Net 3.5中编程,所以我尝试记住.Net泛型集合的"原生"方法.
它发生了几次,我自己实现了一个已经可用的List方法,因为我无法LINQ它.
在这种情况下我觉得很方便的是,使用VS2008,我可以使用类型推断和lambda语法.这些是编译器功能,而不是框架功能.这意味着我可以写这个并仍然保留在.Net 2.0中:
var myOddNums = myNums.FindAll(n => n%2==1);
Run Code Online (Sandbox Code Playgroud)
但是如果你确实有LINQ可用,那么保持延迟执行和立即执行之间的区别很重要.
如果我没记错的话,主要区别(除了它们实现的内容:IEnumerable<T>vs. List<T>)是Where实现延迟执行,在你需要之前它实际上不会进行查找 - 例如在foreach循环中使用它. FindAll是一种立即执行方法.
| 归档时间: |
|
| 查看次数: |
68710 次 |
| 最近记录: |