linq 使用Find()而不是FirstOrDefault()方法是否更好[重复]

eivgtgni  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(137)

此问题已在此处有答案

Performance of Find() vs. FirstOrDefault() [duplicate](2个答案)
2小时前关闭
我很高兴地使用FirstOrDefault()方法来获得满足条件的第一个元素。但是从某个时候开始,我收到了声纳警告应该使用“Find”方法而不是“FirstOrDefault”扩展
请告诉我为什么Find()FirstOrDefault()好。
我在下面给出的代码中得到了上面提到的声纳警告:

请参考上面的代码屏幕截图,并建议如何用Find()方法重写相同的代码。

jc3wubiy

jc3wubiy1#

根据Sonar docs,这是为了提高性能:
List.Find方法和IEnumerable.FirstOrDefault方法都可以用来查找集合中满足给定条件的第一个元素。但是,对于List对象,List.Find可能比IEnumerable.FirstOrDefault更快。对于小型集合,性能差异可能很小,但对于大型集合,性能差异可能很明显。这同样适用于ImmutableList和数组。

hk8txs48

hk8txs482#

你还没有告诉我们你正在处理什么类型的对象,但基本上,如果你正在处理像List<T>这样的内存集合,Find()可以更有效,特别是对于大型列表,因为它可以使用直接索引优化搜索。但是,如果您需要使用其他数据源(如数据库)或更喜欢更通用的方法,FirstOrDefault()是一个合适的选择。

**

既然你已经编辑了你的问题,答案就更容易了。GetMethods()函数返回一个数组(列表)。因此,Find()将是给出上述解释的最佳方法。

nnt7mjpx

nnt7mjpx3#

Sonar警告建议使用Find()而不是FirstOrDefault(),以提高代码可读性和潜在的性能改进。虽然有些人可能会认为First()FirstOrDefault()在找到匹配时停止更明确,但Find()是一种专门用于基于条件搜索集合的方法,使您的意图清晰。此外,Find()可能会带来一些性能上的好处,尤其是对于较大的集合。最终,选择取决于您的编码风格和特定用例。

相关问题