我一直在研究两种linq方法Find()
和First()
之间的差异。我能找到的唯一差异(双关语)是Find()
使用foreach
循环而不是for
循环,First()
不需要调用参数。
那么我有理由使用Find()
代替First()
吗?
编辑:我已经阅读C# Difference between First() and Find() ,但它没有给出任何理由使用其中一个。{3}}它只讨论了两者如何以不同方式迭代列表。
答案 0 :(得分:1)
主要是风格偏好,但在某些情况下存在差异。
Find
是在有限的一组类型(List<T>
,数组)上定义的,而First
则定义为所有IEnumerable
和IQueryable
类型的扩展名。使用First
可以轻松更改基础集合类型,包括使用.Where
和.Select
方法的结果。将可枚举转换为支持.Find
的选项总是比调用.First
更慢的选项。
两种方法的性能在它们定义的类型上大致相同,因为它们都只是通过元素进行线性搜索。有关您的更多信息已经链接 - C# Difference between First() and Find()
如果你有&#34;可查询&#34;枚举(例如,当使用LINQ-to-SQL时)使用.First
可能比将结果转换为支持.Find
的集合(即使用.ToList
)并且调用.Find
要快得多}。这种可查询枚举可能会将.First
转换为数据库特定查询,该查询将返回一个结果,而.ToList
可能需要为客户端过滤提取更多结果。