Linq中的Empty()和DefaultIfEmpty()使用
来源:互联网 发布:windows激活工具 编辑:程序博客网 时间:2024/06/01 21:26
这篇文章主要介绍了c#中Empty()和DefalutIfEmpty()用法,以实例形式分析了针对不同情况下Empty()和DefalutIfEmpty()用法区别,需要的朋友可以参考下
本文实例分析了c#中Empty()和DefalutIfEmpty()用法。分享给大家供大家参考。具体分析如下:
在项目中,当我们想获取IEnumerable<T>集合的时候,这个集合有可能是null。但通常的做法是返回一个空的集合。
假设有这样一个场景:当商店不营业时,返回一个空的IEnumerable<Product>,而当商店正常营业时,就返回一个非空的IEnumerable<Product>。
Product模型。
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } }
该商店有一个ProductService类,该类根据属bool类型属性IsClosed来决定是否返回空的IEnumerable<Product>。
public class ProductService { public bool IsClosed { get; set; } private static IEnumerable<Product> GetAllProducts() { return new List<Product>() { new Product(){Id = 1, Name = "Product1", Price = 85M}, new Product(){Id = 2, Name = "Product2", Price = 90M} }; } public IEnumerable<Product> ShowProducts() { if (!IsClosed) { return GetAllProducts(); } return new List<Product>(0); } }
在客户端,假设我们设置为不营业。
class Program { static void Main(string[] args) { ProductService service = new ProductService(); service.IsClosed = true; IEnumerable<Product> products = service.ShowProducts(); if (products.Count() > 0) { foreach (var prod in products) { Console.WriteLine("产品:{0},价格:{1}",prod.Name, prod.Price); } } else { Console.WriteLine("今天不营业~~"); } Console.ReadKey(); } }
输出结果:今天不营业~~
这样做确实没什么问题,但问题是:当通过 new List<Product>(0)返回空的集合时,为其分配了内存。对于一个只读的、空的集合类型,是否可以做到不耗费内存呢?
--答案是使用Enumerable类的静态方法Empty()。
在ProductService的ShowProducts()中修改如下
public IEnumerable<Product> ShowProducts() { if (!IsClosed) { return GetAllProducts(); } return Enumerable.Empty<Product>(); }
输出结果:今天不营业~~
如果在不营业的时候,我们还是想展示一些产品,比如把产品放在迎街玻璃橱窗中展示,如何做到呢?
--这时,我们可以考虑使用Enumerable类的静态类方法DefaultIfEmpty()。
继续修改ProductService,添加一个返回默认IEnumerable<Product>的方法:
private static IEnumerable<Product> GetDefaultProducts() { return new List<Product>() { new Product(){Id = 1, Name = "Product1", Price = 85M} }; }
修改ProductService的ShowProducts()方法如下:
public IEnumerable<Product> ShowProducts() { if (!IsClosed) { return GetAllProducts(); } return Enumerable.DefaultIfEmpty(GetDefaultProducts()); }
总结:
Empty<T>和DefaultIfEmpty(IEnumerable<T>)都是Enumerable类的静态方法,给出了当返回的集合类型为空时的处理方法:
● 如果想获取一个空的集合,使用Enumerable.Empty<T>()
● 如果想给获取到的、空的集合一个默认值,使用Enumerable.DefaultIfEmpty(IEnumerable<T>)
转载于:http://www.jb51.net/article/57963.htm
- Linq中的Empty()和DefaultIfEmpty()使用
- Linq 使用GroupJoin和DefaultIfEmpty实现左联接
- LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat
- 关于Linq to Sql 中的left join 中defaultifempty的相关注意事项
- 自己动手重新实现LINQ to Objects: 12 - DefaultIfEmpty
- jQuery中的empty和remove
- PHP 中的isset和empty
- jquery 中的empty()和remove()
- js中的empty()和remove()的区别
- PHP中的 empty() 函数和 isset() 函数
- C#中的DBNull、Null、String.Empty和“”
- Codeblocks中的empty project和console application
- EL表达式中的empty和null
- php中的isset()和empty()的区别
- Linq在三层中的使用
- 使用linq 中的GroupBy分组
- Linq中的Aggragate的使用
- linq 在Datatable中的使用
- spring mvc 配置datasource
- JAVA架构师打怪之路
- 使用可观察的提供者
- Tracing my right or wrong way of learning ML here.
- 硬件编解码(七)【Intel(R)_Media_SDK】官方文档翻译摘要
- Linq中的Empty()和DefaultIfEmpty()使用
- Lock的await/singal 和 Object的wait/notify 的区别
- RDD、DataFrame和DataSet的区别
- mysql5.6、5.7——yum快速安装
- JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用
- 62. Unique Paths
- C++ builder 中 流式布局 panel块可自动排列
- FD_WRITE
- Opencv鼠标截取图片场景