将类型对象的空列表设置为返回类型为对象的IEnumerable的函数

时间:2015-06-05 15:03:33

标签: c# linq list ienumerable

在我的BLL中,我需要首先声明一个空列表,然后最终使用我的DAL中返回类型IEnumerable的函数在代码中设置它。

这是做这样的事情的正确方法吗?

IEnumerable<productList> productList = new List<Product>();
productList = DAL.GetProducts();

通常我只是执行以下操作,但上述情况不同:

    IEnumerable<productList> productList = DAL.GeytProducts();

只是为了清除任何混淆,这是我的代码示例:我只是想知道我是否正确地执行此操作:

IEnumerable<Product> retval = new List<Product>();

if (myInteger > 0) 
{
    retval = DAL.GetProducts1(); // this DAL function returns IEnumerable<Product>
} 
else 
{
    retval = DAL.GetProductHistory(); // this DAL function returns IEnumerable<Product>
}

return retval

2 个答案:

答案 0 :(得分:4)

无需创建空列表 - 只需使用

即可
IEnumerable<Product> retval;

您的if / else会将您对DAL中相应列表的引用设置为

创建一个空列表可能不会伤害任何东西(因为列表不会占用太多内存并且很快就有资格获得GC),但这是不必要的。

可能也只是这样做

if (myInteger > 0) 
{
    return DAL.GetProducts1(); // this DAL function returns IEnumerable<Product>
} 
else 
{
    return DAL.GetProductHistory(); // this DAL function returns IEnumerable<Product>
}

或只是

return myInteger > 0 ? DAL.GetProducts1() : DAL.GetProductHistory();

(假设两者都返回相同的类型)

并为自己保存一个变量,但它不会产生任何实际差异。

答案 1 :(得分:2)

当您在retValif子句中为其赋值时,无需实例化else,最终会为其分配一些值。所以你可以:

IEnumerable<Product> retval;

if (myInteger > 0) 
{
    retval = DAL.GetProducts1(); // this DAL function returns IEnumerable<Product>
} 
else 
{
    retval = DAL.GetProductHistory(); // this DAL function returns IEnumerable<Product>
}

return retval;

甚至您可以从if返回,而其他部分则直接返回:

if (myInteger > 0) 
{
    return DAL.GetProducts1(); // this DAL function returns IEnumerable<Product>
} 
else 
{
    return DAL.GetProductHistory(); // this DAL function returns IEnumerable<Product>
}

但只需确保所有代码路径都返回一些值或将值设置为retVal