此问题已在此处有答案:
Performance of Find() vs. FirstOrDefault() [duplicate](2个答案)
2小时前关闭
我很高兴地使用FirstOrDefault()
方法来获得满足条件的第一个元素。但是从某个时候开始,我收到了声纳警告应该使用“Find”方法而不是“FirstOrDefault”扩展。
请告诉我为什么Find()
比FirstOrDefault()
好。
我在下面给出的代码中得到了上面提到的声纳警告:
请参考上面的代码屏幕截图,并建议如何用Find()
方法重写相同的代码。
3条答案
按热度按时间jc3wubiy1#
根据Sonar docs,这是为了提高性能:
List.Find
方法和IEnumerable.FirstOrDefault
方法都可以用来查找集合中满足给定条件的第一个元素。但是,对于List对象,List.Find
可能比IEnumerable.FirstOrDefault
更快。对于小型集合,性能差异可能很小,但对于大型集合,性能差异可能很明显。这同样适用于ImmutableList和数组。hk8txs482#
你还没有告诉我们你正在处理什么类型的对象,但基本上,如果你正在处理像
List<T>
这样的内存集合,Find()
可以更有效,特别是对于大型列表,因为它可以使用直接索引优化搜索。但是,如果您需要使用其他数据源(如数据库)或更喜欢更通用的方法,FirstOrDefault()
是一个合适的选择。**
既然你已经编辑了你的问题,答案就更容易了。
GetMethods()
函数返回一个数组(列表)。因此,Find()
将是给出上述解释的最佳方法。nnt7mjpx3#
Sonar警告建议使用
Find()
而不是FirstOrDefault()
,以提高代码可读性和潜在的性能改进。虽然有些人可能会认为First()
和FirstOrDefault()
在找到匹配时停止更明确,但Find()
是一种专门用于基于条件搜索集合的方法,使您的意图清晰。此外,Find()
可能会带来一些性能上的好处,尤其是对于较大的集合。最终,选择取决于您的编码风格和特定用例。