代码之家  ›  专栏  ›  技术社区  ›  Curtis White

List、IList、IEnumerable、IQueryable、ICollection,哪种返回类型最灵活?

  •  47
  • Curtis White  · 技术社区  · 14 年前

    我以前在这里看到过这个问题,但我不满意我能理解其中的全部后果。问题是使用linq to sql的数据层应该返回什么类型的返回,以获得最大的灵活性和查询能力。这是我读到的:

    1. IEnumerable是有限的,只允许读前操作。IEnumerable是最通用的。我发现IEnumerable确实允许查询操作而不是扩展语法。

    2. 应使用集合而不是列表来启用只读集合。

    我觉得我对取舍有了更好的感觉,但仍不确定以下几点:

    1. 为什么我要选择接口变体而不是具体类型?即IList或ICollection vs List或Collection。我能得到什么好处?

    2. 我看到扩展操作可以工作,但是扩展的查询语法也可以工作吗?

    3. 以前有人建议我使用AsQueryable()。但是,如果我没有连接到数据库,为什么要这样做?不管怎样,扩展方法似乎都是有效的。

    3 回复  |  直到 11 年前
        1
  •  29
  •   Rex M    14 年前

        2
  •  7
  •   Trevor Pilley    12 年前

    您应该总是返回一个接口而不是一个具体的类型,这是不言而喻的,因为它指定了在不将使用者绑定到特定实现的情况下允许的行为。

        3
  •  3
  •   Hc5kphUXpR    14 年前

    1) 最好返回一个IList,这样就可以将结果放入实现该接口的任何对象中,而不是强制调用方使用列表。例如,调用者可能希望将结果返回到ArrayList,如果将结果返回到列表,则这是不可能的。ArrayList不从List继承,但它实现了IList。