最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年11月28日 15:48:00   投稿:shichen2014  
這篇文章主要介紹了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模型。

復(fù)制代碼 代碼如下:
public class Product
{
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
}

該商店有一個(gè)ProductService類,該類根據(jù)屬bool類型屬性IsClosed來(lái)決定是否返回空的IEnumerable<Product>。

復(fù)制代碼 代碼如下:
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è)。

復(fù)制代碼 代碼如下:
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í)沒什么問(wèn)題,但問(wèn)題是:當(dāng)通過(guò) new List<Product>(0)返回空的集合時(shí),為其分配了內(nèi)存。對(duì)于一個(gè)只讀的、空的集合類型,是否可以做到不耗費(fèi)內(nèi)存呢?

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

在ProductService的ShowProducts()中修改如下:

復(fù)制代碼 代碼如下:
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類的靜態(tài)類方法DefaultIfEmpty()。

繼續(xù)修改ProductService,添加一個(gè)返回默認(rèn)IEnumerable<Product>的方法:

復(fù)制代碼 代碼如下:
private static IEnumerable<Product> GetDefaultProducts()
{
    return new List<Product>()
    {
 new Product(){Id = 1, Name = "Product1", Price = 85M}
    };
}

修改ProductService的ShowProducts()方法如下:

復(fù)制代碼 代碼如下:
public IEnumerable<Product> ShowProducts()
{
    if (!IsClosed)
    {
 return GetAllProducts();
    }
    return Enumerable.DefaultIfEmpty(GetDefaultProducts());
}

總結(jié):

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

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

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

沙河市| 泸溪县| 双江| 客服| 同德县| 夹江县| 双鸭山市| 志丹县| 浏阳市| 赫章县| 辽中县| 乳山市| 西林县| 潼南县| 阳西县| 山丹县| 双江| 武川县| 井陉县| 本溪市| 永德县| 南涧| 赞皇县| 蓝田县| 华坪县| 双峰县| 沭阳县| 定日县| 吴川市| 大同市| 中江县| 海兴县| 大邑县| 扶余县| 安福县| 双江| 公安县| 峨眉山市| 怀宁县| 藁城市| 凤城市|