【问题标题】:Is the Find() method useless?Find() 方法没用吗?
【发布时间】:2018-01-29 03:10:44
【问题描述】:

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

那么我有什么理由应该使用Find() 而不是First()

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

【问题讨论】:

  • Find() 不需要调用参数。我认为这种说法是错误的,因为 Find 需要“谓词”作为参数。
  • Find() 不是 LINQ 扩展,而是特定于集合(List.Find、Array.Find 等),因此通常比 LINQ 扩展快
  • @Rawitas Krungkaew 那是我的错误。我的意思是说 First() 不需要参数。感谢您指出这一点。

标签: c# list linq optimization iteration


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多