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

首頁 > 學院 > 開發設計 > 正文

c#中何時使用Empty()和DefalutIfEmpty()

2019-11-14 16:34:44
字體:
來源:轉載
供稿:網友

在項目中,當我們想獲取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());        }

1

 

  總結

Empty<T>和DefaultIfEmpty(IEnumerable<T>)都是Enumerable類的靜態方法,給出了當返回的集合類型為空時的處理方法:

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 射阳县| 岐山县| 青铜峡市| 隆安县| 陈巴尔虎旗| 紫金县| 石景山区| 贵定县| 阳春市| 留坝县| 丹凤县| 龙口市| 黄陵县| 玉环县| 资源县| 金乡县| 子洲县| 南乐县| 灵寿县| 广宁县| 平乐县| 阳泉市| 竹北市| 三台县| 抚宁县| 浪卡子县| 绥阳县| 修武县| 乳山市| 桐柏县| 儋州市| 阿拉尔市| 当阳市| 黑山县| 天镇县| 闸北区| 瑞丽市| 兴山县| 改则县| 奇台县| 同仁县|