我想我的问题说明了一切。为什么 Find 方法不存在Enumerable<>
而存在于List<>
. 如果他们在那里,它将减少编写大型LINQ
查询以从中查找内容的负担Enumerable<>
。我知道我可以使用将 Enumerable 更改为 List ,.ToList()
但这将是一个 hack。
2 回答
Enumerable.FirstOrDefault<TSource> 扩展方法与List<T>.Find 方法完全相同。
Enumerable.FirstOrDefault<TSource> 方法
返回序列中满足条件的第一个元素,如果没有找到这样的元素,则返回默认值。
返回值:如果源为空或没有元素通过谓词指定的测试,则返回默认值(TSource);否则,源中的第一个元素通过谓词指定的测试。
List<T>.Find 方法
搜索与指定谓词定义的条件匹配的元素,并返回整个 List<T> 中的第一个匹配项。
返回值:匹配指定谓词定义的条件的第一个元素,如果找到的话;否则,类型 T的默认值。
类包含比接口更多的“辅助函数”是很常见的,原因很简单,将辅助函数添加到类只需将代码和该方法的代码添加到一个地方(有问题的类),同时添加一个辅助函数对接口的函数强制该接口的每个实现都为该函数添加代码。
如果 CLR 的下一个版本可以提供一种接口可以为其成员指定默认实现的方法,这将很有帮助,特别是如果接口的旧版本的实现可以被视为实现新版本,使用任何新版本的默认实现成员。如果这样的事情是合法的,则IEnumerable<T>
可以添加一个Count
方法,该方法可以被任何能够确定项目数量而不必迭代它们的实现覆盖,但否则它将使用通过迭代计数的默认方法。如果存在这样的功能,添加喜欢Find
的成员IEnumerable<T>
会很有用。不幸的是,我知道没有计划实施这样的功能。