在C#的List集合中查找一个符合条件的元素,一般我们会用First方法或者FirstOrDefault方法来返回第一个符合条件的对象,First方法和FirstOrDefault的调用都是使用Lambda表达式方式来书写查询语句条件。其实建议统一使用FirstOrDefault方法来查询List集合中符合条件的第一个记录,因为First方法在无法查到任何符合条件信息的对象的情况下,会直接抛出System.InvalidOperationException异常,提示序列不包含任何匹配元素。而使用FirstOrDefault方法则不会抛出异常,如果在List集合中未查找到符合条件的元素对象,则返回默认值,如果是对象类型的数据则返回Null,其余基础类型返回对应的默认值。

例如,我们有个List集合List<TestModel>对象list,TestModel类的定义如下:

public class TestModel
    {
         public int Index { set; get; }

public string Name { set; get; }
    }

list对象的具体定义以及内容元素如下,包含2个实体对象。

List<TestModel> list = new List<ConsoleApplication1.TestModel>();
   list.Add(new ConsoleApplication1.TestModel() { Index=1,Name="Text1" });
   list.Add(new ConsoleApplication1.TestModel() { Index = 2, Name = "Text2" });

使用First方法来查找Index=12的记录的语句为:var model = list.First(t => t.Index == 12)。此代码块在运行的时候直接抛出System.InvalidOperationException异常,提示序列不包含任何匹配元素,然后程序终止执行。而如果使用FirstOrDefault方法来书写的话,相关语句则为var model = list.FirstOrDefault(t => t.Index == 12)。返回的model变量的值为null,只需要在后续代码中判断model是否为null即可,程序在运行时候不会直接抛出异常。

得出结论:First方法和FirstOrDefault方法尽量使用FirstOrDefault方法来实现查找功能,FirstOrDefault方法不会直接抛出程序运行时异常而终止程序的执行。

备注:原文转载自博主个人站IT技术小趣屋,原文链接C#中List集合First和FirstOrDefault方法有何不同_IT技术小趣屋。

转载于:https://www.cnblogs.com/xu-yi/p/10993585.html

【转载】C#中List集合First和FirstOrDefault方法有何不同相关推荐

  1. matlab作动态函数曲线图,[转载]Matlab中使用Plot函数动态画图方法总结

    本帖最后由 sonictl 于 2012-12-31 12:18 编辑 请删除我 清楚超靠靠靠 没办法,一会儿限制这不能发表,那不能发表的.... [转载]Matlab中使用Plot函数动态画图方法总 ...

  2. sql编程接收一个集合_T-SQL中基于集合的程序编程方法简介

    sql编程接收一个集合 介绍 (Introduction) Most IT professionals started their studies or careers by learning pro ...

  3. [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递

    参考链接: 用Java传递和返回对象 看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型  值传递:引用类型,地址值传递,所 ...

  4. [转载]文华财经中设置倒置的k线方法

    原文地址:文华财经中设置倒置的k线方法 作者:交易者部落 在文华财经看盘的软件中,没有直接设置倒置k线的方法,很多投资这想看看倒置的k线,不过没有关系,我们可以编写程序的方法来实现这个功能,经过调试, ...

  5. [转载] Python中为什么len不是普通方法

    参考链接: Python len() 如果x是一个内置类型的实例,那么len(x)的速度会非常快.背后的原因是CPython会直接从一个C结构体力读取对象的长度,完全不会调用任何方法.获取一个集合中元 ...

  6. Python中求集合交集的intersection()方法

    选择题 以下python代码的输出结果是什么? set0 = {'a','b','c'} set1 = {'b','c','d'} set2 = {'c','d','e'} newset = set0 ...

  7. matlab中读文件的行数_[转载]MATLAB中获取大型文本文件行数方法研究(转)

    在工作中会有很多特殊的需要,比如我现在就遇到一个需要将大型的文本格式数据文件(比如5G)读取到MATLAB中,同时进行一定的处理.由于XP的内存是绝对没有办法将5G的数据一次性加载到工作空间的,此时一 ...

  8. 【转载】C#中List集合使用Exists方法判断是否存在符合条件的元素对象

    在C#的List集合操作中,有时候需要根据条件判断List集合中是否存在符合条件的元素对象,此时就可以使用List集合的扩展方法Exists方法来实现,Exists方法的签名为bool Exists( ...

  9. 【转载】C#中List集合使用Contains方法判断是否包含某个对象

    在C#的List集合中,如果要查找List集合是否包含某一个值或者对象,如果不使用List集合类的扩展方法的话一般会使用for循环或者foreach遍历来查找,其实List集合类中的扩展方法Conta ...

最新文章

  1. 如何关闭vue项目中eslint的校验
  2. DirectShow Filter 基础与简单的示例程序
  3. Android NDK开发之旅14 JNI 缓存策略
  4. [NTU-Machine-learning-note]1 Introduction(3)
  5. Shell脚本中字符串的一些常用操作
  6. 硅谷创业者中被遮蔽的“中国现象”
  7. 内存的动态分配过程分析
  8. 台达编码器型号含义_光电编码器型号含义_光电编码器应用实例
  9. 灯三段调光原理_各种筒灯、射灯、斗胆灯最全的解释?用对地方,效果加倍
  10. 人和人之间不要靠的太近
  11. 蒋江伟:代码是我们最重要的资产!
  12. 系统补丁不适用计算机,无法安装IE11 安装补丁“此更新不适用于你的计算机”解决办法...
  13. PyQt在qrc文件中添加自定义字体并使用
  14. 机器人 陆梅东_第十八届全国中小学组电脑制作活动上海赛区.DOC
  15. 2019牛客暑期多校训练营(第六场) Move
  16. linux入门--磁盘管理之分区、格式化与挂载
  17. 第二天学习笔记:(MDN HTML学习、web安全策略与常见攻击、语义化)
  18. declare 简单用法
  19. 猿人学之js混淆源码乱码
  20. Mybatis入门学习七:日志

热门文章

  1. easyui的datagrid可编辑框小功能实例
  2. PC端浏览器兼容测试总结
  3. Android系统架构及生态链
  4. 【云原生】在 React Native 中使用 AWS Textract 实现文本提取
  5. OAuth2实现安全登录(一)环境配置
  6. 国内3G市场发展情况
  7. Android通知栏字体大小,Android通知栏介绍与适配总结(上篇)
  8. Transformer时序预测
  9. js:写一个函数实现任意数组的翻转
  10. fullCalendar获取某一天的日程(event)