程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#中Empty()和DefalutIfEmpty()用法剖析

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

編輯:C#入門知識

c#中Empty()和DefalutIfEmpty()用法剖析。本站提示廣大學習愛好者:(c#中Empty()和DefalutIfEmpty()用法剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是c#中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());
}

總結:

Empty<T>和DefaultIfEmpty(IEnumerable<T>)都是Enumerable類的靜態辦法,給出了當前往的聚集類型為空時的處置辦法:

● 假如想獲得一個空的聚集,應用Enumerable.Empty<T>()
● 假如想給獲得到的、空的聚集一個默許值,應用Enumerable.DefaultIfEmpty(IEnumerable<T>)

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved