C# Find vs FirstOrDefault
来源:互联网 发布:手机视频分享软件 编辑:程序博客网 时间:2024/05/17 07:06
本文告诉大家,在获得数组第一个元素时,使用哪个方法性能更高。
需要知道,两个方法都是 Linq 的方法,使用之前需要引用 Linq 。对于 List 等都是继承可枚举Enumerable
这时获取第一个元素可以使用FirstOrDefault
。如果使用Find
那么需要数组的类型是IList
。
下面写一个简单的例子
反编译 Find 可以看到下面代码,下面的代码删了一些代码,让大家比较容易看到 Find 使用的是 for 然后使用判断
private T[] _items;public T Find(Predicate<T> match){ for (int index = 0; index < this._size; ++index) { if (match(this._items[index])) return this._items[index]; } return default (T);}
而 FirstOrDefault 的代码存在 foreach ,这会调用列表的 GetEnumerator 方法,而且还会在结束的时候调用 Dispose 。这样 FirstOrDefault 的性能就比 Find 稍微差一些。
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate){ foreach (TSource source1 in source) { if (predicate(source1)) return source1; } return default (TSource);}
所以在对于 List
类型的获得第一个或默认请使用 Find ,其他的请使用FirstOrDefault
对于 List ,使用 for 的速度是 foreach 的两倍
遍历 array 的速度是遍历 List 的两倍
使用 for 遍历 array 的速度是使用 foreach 遍历 List 的5倍
参见:https://stackoverflow.com/a/365658/6116637
本文会经常更新,请阅读原文: https://lindexi.gitee.io/lindexi/post/C-Find-vs-FirstOrDefault.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
- C# Find vs FirstOrDefault
- Find和FirstOrDefault()有什么区别?
- Find和FirstOrDefault()有什么区别?
- Find()和First()与FirstOrDefault()区别
- Find和FirstOrDefault()有什么区别?
- JPA find() vs. getReference()
- Matcher: find vs matches
- 【c#】VS
- grep实例 Vs find实例
- find -exec cmd {} + vs | xargs
- jquery之find vs filter
- 使用FirstOrDefault不用SingleOrDefault
- First and FirstOrDefault 区别
- 步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
- 步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
- bash vs perl vs c
- findmaven.net vs findjar.com-find jar,find maven
- Linq: First,FirstOrDefault,Single,SingleOrDefault
- 手把手教你webpack3(1)最简单的webpack实例
- 安卓ViewPager实现画廊效果
- AndroidStudio多渠道打包
- UIStoryboardSegue
- java中的异或问题
- C# Find vs FirstOrDefault
- RESTful API 设计指南
- 整合spring cloud云服务
- 页码插件
- Xshell5连接本机的虚拟机上乌班图
- 在C#中快速查询文件
- 网桥,Bond,Team
- KotLin学习--集合过滤操作的惯用语法
- 自顶向下,逐步求精