当前位置: 首页 > news >正文

Enumerable.Single和Enumerable.SingleOrDefault方法

Enumerable.Single方法,返回集合中唯一的一条记录,如果记录数不等于1就报错。

Enumerable.SingleOrDefault方法,返回集合中唯一的一条记录,如果记录数大于1报错,如果记录数等于0,则返回默认值。对于引用类型和可空类型的数据,这个默认值就是null。
有时候返回的这个null不是很方便,可以通过扩展方法,扩展一个SingleOrNew方法。
具体代码如下:
 

 
 
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.          
  6.         List<test> l = new List<test>(){  
  7.         new test(),  
  8.         new test()  
  9.         };  
  10.           
  11.         var o1 = l.SingleOrNew<test>(m => m.a == 0);//匹配2个,异常  
  12.         var o2 = l.SingleOrNew<test>(m => m.a == 70);//匹配0个,返回new test()  
  13.  
  14.     }  
  15. }  
  16.  
  17. class test  
  18. {  
  19.     public int a;  
  20.     public string s;  
  21. }  
  22.  
  23. static class Extension  
  24. {  
  25.     public static T SingleOrNew<T>(this IEnumerable<T> query) where T : new()  
  26.     {  
  27.         if (query.Count() == 0)  
  28.         {  
  29.             return new T();  
  30.         }  
  31.         return query.Single();  
  32.     }  
  33.  
  34.     public static T SingleOrNew<T>(this IEnumerable<T> query, Func<T, bool> predicate) where T : new()  
  35.     {  
  36.         if (query.Count(predicate) == 0)  
  37.         {  
  38.             return new T();  
  39.         }  
  40.         return query.Single(predicate);  
  41.     }  
  42. }  

 














本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1001731,如需转载请自行联系原作者



相关文章:

  • MariaDB Window Functions窗口函数分组取TOP N记录
  • Linux职场解读:如何进入500强企业?
  • 拥抱电商,语音助手正在成为“方便之王”
  • 第0次作业
  • Linux Bash Shell字符串抽取、按列合并和格式化输出
  • TCP/IP学习笔记(7)-广播,多播IGMP协议
  • 【编译打包】sphinx-for-chinese-2.2.1-r4311.el6.src.rpm
  • 缓冲区溢出漏洞实验
  • MSQL基本增删改语句汇总练习
  • Jsp/Servlet:小结图片操作的一些代码
  • 十:Application Lifecycle Management in Visual Studio 2008 Team Foundation Server 2008
  • it之家
  • 天气预报代码调用
  • Java静态方法和实例方法 java中的数组作为形参传入
  • [CodeForces-759D]Bacterial Melee
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android交互
  • css的样式优先级
  • CSS魔法堂:Absolute Positioning就这个样
  • css选择器
  • IDEA常用插件整理
  • mongodb--安装和初步使用教程
  • PAT A1050
  • Promise面试题,控制异步流程
  • Python利用正则抓取网页内容保存到本地
  • Vue 重置组件到初始状态
  • XML已死 ?
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何实现 font-size 的响应式
  • 实现菜单下拉伸展折叠效果demo
  • 算法系列——算法入门之递归分而治之思想的实现
  • 你对linux中grep命令知道多少?
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Spring第一个helloWorld
  • (31)对象的克隆
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (推荐)叮当——中文语音对话机器人
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 未来三学期想要修的课 (日記)
  • ***通过什么方式***网吧
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net MySql
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net下的富文本编辑器FCKeditor的配置方法
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [] 与 [[]], -gt 与 > 的比较
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [AIGC] Spring Interceptor 拦截器详解
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [IE编程] 多页面基于IE内核浏览器的代码示例