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

首頁 > 編程 > C# > 正文

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

2020-01-24 02:15:27
字體:
來源:轉載
供稿:網友

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

總結:

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

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

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 迭部县| 甘南县| 大关县| 锡林郭勒盟| 工布江达县| 柏乡县| 尉氏县| 台中县| 宝山区| 涞源县| 青田县| 柳江县| 腾冲县| 长春市| 新邵县| 卫辉市| 溧水县| 甘德县| 曲松县| 府谷县| 南雄市| 若尔盖县| 陆河县| 杨浦区| 科尔| 武义县| 昌图县| 武功县| 车致| 股票| 四子王旗| 云浮市| 海南省| 邢台县| 台北县| 昌都县| 思茅市| 江华| 偃师市| 游戏| 惠州市|