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 => x.Key == "Key")?.Property ?? "defaultValue"; // NULL时抛出异常
var value = obj.Find(x => x.Key == "Key")?.Property ?? "defaultValue"; // True
var value = obj.FirstOrDefault(x => x.Key == "Key")?.Property ?? "defaultValue";

浙公网安备 33010602011771号