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