手机
当前位置:查字典教程网 >编程开发 >C#教程 >c#中Empty()和DefalutIfEmpty()用法分析
c#中Empty()和DefalutIfEmpty()用法分析
摘要:本文实例分析了c#中Empty()和DefalutIfEmpty()用法。分享给大家供大家参考。具体分析如下:在项目中,当我们想获取IEnu...

本文实例分析了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());

}

c#中Empty()和DefalutIfEmpty()用法分析1

总结:

Empty<T>和DefaultIfEmpty(IEnumerable<T>)都是Enumerable类的静态方法,给出了当返回的集合类型为空时的处理方法:

● 如果想获取一个空的集合,使用Enumerable.Empty<T>()

● 如果想给获取到的、空的集合一个默认值,使用Enumerable.DefaultIfEmpty(IEnumerable<T>)

希望本文所述对大家的C#程序设计有所帮助。

【c#中Empty()和DefalutIfEmpty()用法分析】相关文章:

C#数组应用分析第1/2页

C#中 const 和 readonly 的不同

C#中 paint()与Onpaint()的区别

python实现AutoResetEvent类的阻塞模式方法解析

C#版的 Escape() 和 Unescape() 函数分享

c#中GetType()与Typeof()的区别

基于C#中XmlWriter写入Xml的深入分析

C#中StringBuilder用法以及和String的区别分析

C#中using的三种用法

c# 抓取Web网页数据分析

精品推荐
分类导航