Find()方法没用吗?

时间:2018-01-29 03:10:44

标签: c# list linq optimization iteration

我一直在研究两种linq方法Find()First()之间的差异。我能找到的唯一差异(双关语)是Find()使用foreach循环而不是for循环,First()不需要调用参数。

那么我有理由使用Find()代替First()吗?

编辑:我已经阅读C# Difference between First() and Find() ,但它没有给出任何理由使用其中一个。{3}}它只讨论了两者如何以不同方式迭代列表。

1 个答案:

答案 0 :(得分:1)

主要是风格偏好,但在某些情况下存在差异。

Find是在有限的一组类型(List<T>,数组)上定义的,而First则定义为所有IEnumerableIQueryable类型的扩展名。使用First可以轻松更改基础集合类型,包括使用.Where.Select方法的结果。将可枚举转换为支持.Find的选项总是比调用.First更慢的选项。

两种方法的性能在它们定义的类型上大致相同,因为它们都只是通过元素进行线性搜索。有关您的更多信息已经链接 - C# Difference between First() and Find()

如果你有&#34;可查询&#34;枚举(例如,当使用LINQ-to-SQL时)使用.First可能比将结果转换为支持.Find的集合(即使用.ToList)并且调用.Find要快得多}。这种可查询枚举可能会将.First转换为数据库特定查询,该查询将返回一个结果,而.ToList可能需要为客户端过滤提取更多结果。