千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > FirstOrDefault方法

FirstOrDefault方法

来源:千锋教育
发布人:xqq
时间: 2023-11-24 15:14:08 1700810048

一、介绍

FirstOrDefault方法是C#中Linq的一个扩展方法,它可以用于在序列中查找第一个元素或默认值。

FirstOrDefault方法的定义为:public static TSource FirstOrDefault(this IEnumerable source);

这个方法接受一个类型为IEnumerable的参数source,返回源序列中的第一个元素或默认值。

二、FirstOrDefault方法的原理

当我们调用FirstOrDefault方法时,它会先检查序列是否为空,如果为空,则返回默认值。如果不为空,则返回序列的第一个元素。

注意,FirstOrDefault方法返回的是第一个元素,而不是满足条件的所有元素。


    List numbers = new List { 1, 2, 3, 4, 5 };
    int firstOrDefaultNumber = numbers.FirstOrDefault();

以上代码中,如果序列为空,则返回默认值0。如果序列不为空,则返回1。

三、FirstOrDefault方法的使用场景

1. 查询单个元素

FirstOrDefault方法非常适合用于获取单个元素的场景。对比Find方法,FirstOrDefault方法支持查询复杂的Linq表达式。


    List names = new List { "张三", "李四", "王五" };
    string firstOrDefaultName = names.FirstOrDefault(s => s.StartsWith("王"));

以上代码中,会返回"王五",因为它是第一个以"王"开头的元素。

2. 避免Null异常

在从数据库或其他数据源中获取单个元素时,使用FirstOrDefault方法可以避免产生Null异常。


    Person person = context.People.FirstOrDefault(p => p.Id == 1);
    if(person != null)
    {
        // do something
    }

四、FirstOrDefault方法的缺点

1. 难以区分是找到元素还是默认值

FirstOrDefault方法的返回值返回类型和默认值类型一致,例如int类型的序列的默认值为0,如果序列查找失败,FirstOrDefault方法也会返回0。这样就产生了二义性,无法区分是找到了元素还是没有找到。

2. 无法确定是去引用还是借用

当FirstOrDefault方法查询到一个元素时,它的返回值类型和原序列元素类型不一定一致。如果元素是引用类型,返回值就是这个引用类型的一个实例。但是,如果序列本身存储的是值类型,查询到的元素会被复制到一个新的对象中并返回。这样就无法确定到底是去引用还是借用。

五、总结

本文介绍了FirstOrDefault方法的定义、原理和使用场景,并指出了它的缺点。在实际项目中,FirstOrDefault方法是非常实用的一个方法,在得到一个查询的结果集后通过FirstOrDefault方法取得单个元素。但是,需要注意它的返回值可能是默认值,需要避免引起二义性。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT