为什么在Enumerable<>中不存在查找方法在List<>?中出现

时间:2012-04-24 02:56:54

标签: c# .net linq ienumerable

我认为我的问题就是这么说的。为什么在Enumerable<>中出现List<>时,查找方法不存在。如果他们在那里,它将减轻编写大LINQ查询以从Enumerable<>查找内容的负担。我知道我可以使用.ToList()将Enumerable更改为List,但这将是一个黑客。

2 个答案:

答案 0 :(得分:7)

Enumerable.FirstOrDefault<TSource> Extension MethodList<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>等成员将非常有用。不幸的是,我知道没有计划实施这样的功能。