【问题标题】:Setting an empty list of type object to a function that returns IEnumerable of type object将类型对象的空列表设置为返回 IEnumerable 类型对象的函数
【发布时间】:2026-02-02 07:05:01
【问题描述】:

在我的 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

【问题讨论】:

  • 您正在创建并丢弃列表的一个新实例。这是毫无意义。为什么你认为你必须这样做?这没有任何意义。
  • @Will他说“最终”设置它稍后,这可能意味着它在此期间被访问并且应该是空的。你不知道他的申请。
  • 不确定我如何不必这样做...假设我需要在名为 RETVAL 的 if 语句之外声明一个空列表,然后在 if else 语句中我需要根据情况设置列表,最后返回。
  • 您在 if 的任一分支中都分配了一个值,因此最初没有理由将其设置为任何值。
  • 或者您甚至可以从条件分支中返回,除非您在 if/else 之后对集合执行其他操作

标签: c# linq list ienumerable


【解决方案1】:

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

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();

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

并为自己保存一个变量,但这不会产生任何实际影响。

【讨论】:

  • 非常感谢.. 很抱歉,我的心态完全错误。应该考虑这样做.. duh
【解决方案2】:

没有必要实例化retVal,因为您在ifelse 子句中为其分配了一个值,它最终会被分配一些值。所以你可以:

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

【讨论】:

    最近更新 更多