欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-15 08:32:40
本文实例分析了c#中empty()和defalutifempty()用法。分享给大家供大家参考。具体分析如下: 在项目中,当我们想获取ienumerable

本文实例分析了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#程序设计有所帮助。

上一篇:

下一篇: