本文實例分析了c#中Empty()和DefalutIfEmpty()用法。分享給大家供大家參考。具體分析如下:
在項目中,當我們想獲取IEnumerable<T>集合的時候,這個集合有可能是null。但通常的做法是返回一個空的集合。
假設有這樣一個場景:當商店不營業時,返回一個空的IEnumerable<Product>,而當商店正常營業時,就返回一個非空的IEnumerable<Product>。
Product模型。
該商店有一個ProductService類,該類根據屬bool類型屬性IsClosed來決定是否返回空的IEnumerable<Product>。
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);
}
}
在客戶端,假設我們設置為不營業。
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()中修改如下:
輸出結果:今天不營業~~
如果在不營業的時候,我們還是想展示一些產品,比如把產品放在迎街玻璃櫥窗中展示,如何做到呢?
--這時,我們可以考慮使用Enumerable類的靜態類方法DefaultIfEmpty()。
繼續修改ProductService,添加一個返回默認IEnumerable<Product>的方法:
修改ProductService的ShowProducts()方法如下:
總結:
Empty<T>和DefaultIfEmpty(IEnumerable<T>)都是Enumerable類的靜態方法,給出了當返回的集合類型為空時的處理方法:
● 如果想獲取一個空的集合,使用Enumerable.Empty<T>()
● 如果想給獲取到的、空的集合一個默認值,使用Enumerable.DefaultIfEmpty(IEnumerable<T>)
希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答