国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Linq中的Empty()和DefaultIfEmpty()使用

2019-11-06 06:39:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了c#中Empty()和DefalutIfEmpty()用法,以實(shí)例形式分析了針對(duì)不同情況下Empty()和DefalutIfEmpty()用法區(qū)別,需要的朋友可以參考下

本文實(shí)例分析了c#中Empty()和DefalutIfEmpty()用法。分享給大家供大家參考。具體分析如下:

在項(xiàng)目中,當(dāng)我們想獲取IEnumerable<T>集合的時(shí)候,這個(gè)集合有可能是null。但通常的做法是返回一個(gè)空的集合。

假設(shè)有這樣一個(gè)場(chǎng)景:當(dāng)商店不營(yíng)業(yè)時(shí),返回一個(gè)空的IEnumerable<PRoduct>,而當(dāng)商店正常營(yíng)業(yè)時(shí),就返回一個(gè)非空的IEnumerable<Product>。

Product模型。

public class Product {         public int Id { get; set; }         public string Name { get; set; }         public decimal Price { get; set; } }

該商店有一個(gè)ProductService類(lèi),該類(lèi)根據(jù)屬bool類(lèi)型屬性IsClosed來(lái)決定是否返回空的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);         } }

在客戶端,假設(shè)我們?cè)O(shè)置為不營(yíng)業(yè)。

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("產(chǎn)品:{0},價(jià)格:{1}",prod.Name, prod.Price);                 }             }             else             {                 Console.WriteLine("今天不營(yíng)業(yè)~~");             }             Console.ReadKey();         } }

 

輸出結(jié)果:今天不營(yíng)業(yè)~~

這樣做確實(shí)沒(méi)什么問(wèn)題,但問(wèn)題是:當(dāng)通過(guò) new List<Product>(0)返回空的集合時(shí),為其分配了內(nèi)存。對(duì)于一個(gè)只讀的、空的集合類(lèi)型,是否可以做到不耗費(fèi)內(nèi)存呢?

--答案是使用Enumerable類(lèi)的靜態(tài)方法Empty()。

在ProductService的ShowProducts()中修改如下

public IEnumerable<Product> ShowProducts() {     if (!IsClosed)     {  return GetAllProducts();     }     return Enumerable.Empty<Product>(); }

 

輸出結(jié)果:今天不營(yíng)業(yè)~~

如果在不營(yíng)業(yè)的時(shí)候,我們還是想展示一些產(chǎn)品,比如把產(chǎn)品放在迎街玻璃櫥窗中展示,如何做到呢?

--這時(shí),我們可以考慮使用Enumerable類(lèi)的靜態(tài)類(lèi)方法DefaultIfEmpty()。

繼續(xù)修改ProductService,添加一個(gè)返回默認(rèn)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()); }

 

總結(jié):

Empty<T>和DefaultIfEmpty(IEnumerable<T>)都是Enumerable類(lèi)的靜態(tài)方法,給出了當(dāng)返回的集合類(lèi)型為空時(shí)的處理方法:

● 如果想獲取一個(gè)空的集合,使用Enumerable.Empty<T>()● 如果想給獲取到的、空的集合一個(gè)默認(rèn)值,使用Enumerable.DefaultIfEmpty(IEnumerable<T>)

 

轉(zhuǎn)載于:http://www.jb51.net/article/57963.htm


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 厦门市| 湖南省| 永靖县| 靖安县| 莱西市| 绵阳市| 岢岚县| 兰坪| 惠水县| 新宾| 六安市| 开化县| 赞皇县| 乐平市| 嵊泗县| 都安| 敖汉旗| 石楼县| 都兰县| 蒙城县| 威信县| 大方县| 峨边| 玉山县| 阿克苏市| 新郑市| 寿光市| 方山县| 蓝山县| 瑞昌市| 土默特右旗| 平利县| 宝山区| 枣强县| 邹城市| 聂拉木县| 北海市| 镇宁| 信丰县| 剑川县| 富阳市|