Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Find()方法没用吗?_C#_List_Linq_Optimization_Iteration - Fatal编程技术网

C# Find()方法没用吗?

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和

我一直在研究两种linq方法
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()不需要参数。谢谢你指出这一点。