Find()、First()、FirstOrDefault()

Find方法只能在List<T>上使用,而后两者能更广泛应用在IEnemerable<T>上。Find最终是建立在Array的查找之上,而在IEnemerable上的FirstOrDefault是使用foreach查找的。因此,Find速度会比FirstOrDefault快很多,据测试可能会快一倍以上。

First:取序列中满足条件的第一个元素,如果没有元素满足条件,则抛出异常。

FirstOrDefault:取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)。
当序列中可能找不到满足条件的元素时,使用FirstOrDefault方法,然后,一定要对返回值是否为null,进行不同的处理。可以统一使用下面的格式:

var value = obj.First(x =&gt; x.Key == "Key")?.Property ?? "defaultValue";  // NULL时抛出异常
var value = obj.Find(x =&gt; x.Key == "Key")?.Property ?? "defaultValue";  // True
var value = obj.FirstOrDefault(x =&gt; x.Key == "Key")?.Property ?? "defaultValue";
posted @ 2019-11-18 18:42  wesson2019  阅读(198)  评论(0)    收藏  举报