C# Find()方法没用吗?
我一直在研究两种linq方法C# Find()方法没用吗?,c#,list,linq,optimization,iteration,C#,List,Linq,Optimization,Iteration,我一直在研究两种linq方法Find()和First()之间的差异。我能找到的唯一区别(双关语)是find()使用foreach循环而不是for循环,并且First()不需要调用参数 那么有什么理由我应该使用Find()而不是First() 编辑:我已经读过了,但它没有给出任何理由使用一个而不是另一个。它只是讨论了这两种方法在列表中的迭代方式是如何不同的。主要是风格偏好,但在某些情况下存在差异 Find在有限的类型集(List,array)上定义,而First被定义为所有IEnumerable和
Find()
和First()
之间的差异。我能找到的唯一区别(双关语)是find()
使用foreach
循环而不是for
循环,并且First()
不需要调用参数
那么有什么理由我应该使用Find()
而不是First()
编辑:我已经读过了,但它没有给出任何理由使用一个而不是另一个。它只是讨论了这两种方法在列表中的迭代方式是如何不同的。主要是风格偏好,但在某些情况下存在差异
Find
在有限的类型集(List
,array)上定义,而First
被定义为所有IEnumerable
和IQueryable
类型的扩展。首先使用可以轻松更改基础集合类型,包括使用。Where
和的结果。选择方法。将枚举转换为支持.Find
的枚举总是比只调用.First
慢
这两种方法在它们定义的类型上的性能大致相同,因为它们都只是通过元素进行线性搜索。有关您链接的更多信息-
如果您使用进行“可查询”枚举(例如使用LINQ to SQL时)。首先
可能比将结果转换为支持.Find
(即使用.ToList
)和调用.Find
的集合要快得多。这种可查询的枚举可能会将.First
转换为特定于数据库的查询,该查询将返回一个结果,而.ToList
可能需要引入更多的结果以进行客户端筛选。可能重复的Find()不需要调用参数。我认为这个语句是错误的,因为Find需要“predicate”作为参数。Find()不是LINQ扩展,而是特定于集合的(List.Find、Array.Find等),因此通常比LINQ快extensions@RawitasKrungkaew那是我的错误。我的意思是说First()不需要参数。谢谢你指出这一点。