在我的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
答案 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)
当您在retVal
或if
子句中为其赋值时,无需实例化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
。