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

首頁 > 編程 > C# > 正文

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

2019-10-29 21:46:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了c#中Empty()和DefalutIfEmpty()用法,以實例形式分析了針對不同情況下Empty()和DefalutIfEmpty()用法區別,需要的朋友可以參考下
 

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

 

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

總結:

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

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 家居| 克东县| 鄄城县| 宜阳县| 陇西县| 西昌市| 龙门县| 大兴区| 漯河市| 乡城县| 抚顺市| 玉林市| 阳江市| 裕民县| 天祝| 新和县| 金阳县| 开化县| 奉贤区| 台南县| 张掖市| 德钦县| 视频| 石首市| 香河县| 改则县| 天门市| 凤庆县| 凤阳县| 昂仁县| 大宁县| 运城市| 泰顺县| 常熟市| 鄂托克前旗| 广丰县| 武功县| 包头市| 兖州市| 吉木萨尔县| 尚志市|