本文实例分析了c#中Empty()和DefalutIfEmpty()用法。分享给大家供大家参考。具体分析如下:
在项目中,当我们想获取IEnumerable
假设有这样一个场景:当商店不营业时,返回一个空的IEnumerable
Product模型。
复制代码 代码如下:public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
该商店有一个ProductService类,该类根据属bool类型属性IsClosed来决定是否返回空的IEnumerable
复制代码 代码如下:public class ProductService
{
public bool IsClosed { get; set; }
private static IEnumerable
{
return new List
{
new Product(){Id = 1, Name = "Product1", Price = 85M},
new Product(){Id = 2, Name = "Product2", Price = 90M}
};
}
public IEnumerable
{
if (!IsClosed)
{
return GetAllProducts();
}
return new List
}
}
在客户端,假设我们设置为不营业。
复制代码 代码如下:class Program
{
static void Main(string[] args)
{
ProductService service = new ProductService();
service.IsClosed = true;
IEnumerable
if (products.Count() > 0)
{
foreach (var prod in products)
{
Console.WriteLine("产品:{0},价格:{1}",prod.Name, prod.Price);
}
}
else
{
Console.WriteLine("今天不营业~~");
}
Console.ReadKey();
}
}
输出结果:今天不营业~~
这样做确实没什么问题,但问题是:当通过 new List
--答案是使用Enumerable类的静态方法Empty()。
在ProductService的ShowProducts()中修改如下:
复制代码 代码如下:public IEnumerable
{
if (!IsClosed)
{
return GetAllProducts();
}
return Enumerable.Empty
}
输出结果:今天不营业~~
如果在不营业的时候,我们还是想展示一些产品,比如把产品放在迎街玻璃橱窗中展示,如何做到呢?
--这时,我们可以考虑使用Enumerable类的静态类方法DefaultIfEmpty()。
继续修改ProductService,添加一个返回默认IEnumerable
复制代码 代码如下:private static IEnumerable
{
return new List
{
new Product(){Id = 1, Name = "Product1", Price = 85M}
};
}
修改ProductService的ShowProducts()方法如下:
复制代码 代码如下:public IEnumerable
{
if (!IsClosed)
{
return GetAllProducts();
}
return Enumerable.DefaultIfEmpty(GetDefaultProducts());
}
总结:
Empty
● 如果想获取一个空的集合,使用Enumerable.Empty
● 如果想给获取到的、空的集合一个默认值,使用Enumerable.DefaultIfEmpty(IEnumerable
希望本文所述对大家的C#程序设计有所帮助。



