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

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

 更新時間:2014年11月28日 15:48:00   投稿:shichen2014  
這篇文章主要介紹了c#中Empty()和DefalutIfEmpty()用法,以實例形式分析了針對不同情況下Empty()和DefalutIfEmpty()用法區(qū)別,需要的朋友可以參考下

本文實例分析了c#中Empty()和DefalutIfEmpty()用法。分享給大家供大家參考。具體分析如下:

在項目中,當(dāng)我們想獲取IEnumerable<T>集合的時候,這個集合有可能是null。但通常的做法是返回一個空的集合。

假設(shè)有這樣一個場景:當(dāng)商店不營業(yè)時,返回一個空的IEnumerable<Product>,而當(dāng)商店正常營業(yè)時,就返回一個非空的IEnumerable<Product>。

Product模型。

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

該商店有一個ProductService類,該類根據(jù)屬bool類型屬性IsClosed來決定是否返回空的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è)我們設(shè)置為不營業(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},價格:{1}",prod.Name, prod.Price);
                }
            }
            else
            {
                Console.WriteLine("今天不營業(yè)~~");
            }
            Console.ReadKey();
        }
}

輸出結(jié)果:今天不營業(yè)~~

這樣做確實沒什么問題,但問題是:當(dāng)通過 new List<Product>(0)返回空的集合時,為其分配了內(nèi)存。對于一個只讀的、空的集合類型,是否可以做到不耗費內(nèi)存呢?

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

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

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

輸出結(jié)果:今天不營業(yè)~~

如果在不營業(yè)的時候,我們還是想展示一些產(chǎn)品,比如把產(chǎn)品放在迎街玻璃櫥窗中展示,如何做到呢?

--這時,我們可以考慮使用Enumerable類的靜態(tài)類方法DefaultIfEmpty()。

繼續(xù)修改ProductService,添加一個返回默認(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)返回的集合類型為空時的處理方法:

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

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

相關(guān)文章

最新評論

天长市| 安康市| 婺源县| 山西省| 浦江县| 河西区| 莎车县| 陈巴尔虎旗| 嘉禾县| 高邑县| 南江县| 通海县| 博客| 景洪市| 临西县| 荔波县| 黑山县| 上林县| 达州市| 防城港市| 大新县| 通化县| 澄城县| 砚山县| 衢州市| 江川县| 萝北县| 岳池县| 鹿泉市| 富顺县| 河津市| 西充县| 台东市| 清远市| 景泰县| 佛山市| 探索| 呼伦贝尔市| 定州市| 牡丹江市| 临澧县|