代码之家  ›  专栏  ›  技术社区  ›  Benny

为什么IList<>的特性比List<>少?

  •  9
  • Benny  · 技术社区  · 15 年前

    使用如此巨大的功能 ConvertAll() IList List

    6 回复  |  直到 8 年前
        1
  •  18
  •   mnemosyn    15 年前

    请注意 List<> 是的实现 IList<> IList<&燃气轮机; 可以是其他东西的代理。在db4o和linqtosql中 可以“指向查询”,即访问列表将触发数据库操作。

    这样,你就可以表演了 myList.Skip(600).Take(20); 要执行分页,只有在此步骤中才会执行实际查询。A. 列表<&燃气轮机; 包含一百万个条目将是巨大的,而 IList<&燃气轮机; 有一个巨大的 Count

    ConvertAll

        2
  •  12
  •   Community CDub    8 年前

    为什么不使用 IEnumerable<T>.Select 而不是 List<T>.ConvertAll ? 自从 IList 继承 IEnumerable . 看到这个了吗 question

        3
  •  4
  •   Guffa    15 年前

    因为接口定义了一个行为,而一个类可以实现几个不同的接口,并且还具有接口没有指定的特性。

    如果你想要 List<T> IList<T> 参考文献。使用 列表<T>

        4
  •  3
  •   Bablo    15 年前

    只是因为 IList(T) List(T) 是.net bcl中实现 IList(吨) IList(吨) 将需要 ConvertAll()

        5
  •  1
  •   Jason Kresowaty    15 年前

    这个 IList 接口的设计是为了广泛地实现。通过省略方便的方法,这意味着实现接口的工作量减少,编写bug的机会也减少。

    幸运的是,LINQ方面对此进行了改进,并通过“extensionmethod”特性添加了一些有用的方法。 Select Cast 对于转换目的特别有用。确保您的目标是.NET Framework 3.5,请参考 System.Core using System.Linq; 去看看吧。

        6
  •  0
  •   supercat    12 年前

    IFoo 其中包括会员 string Boz(int param) 可以指定 伊福 string IFoo.Boz(int param) { return IFoo_Helpers.Boz(this, param);} . 如果2.0版的.net中存在这样一个方法工具,那么到目前为止,只要有 IEnumerable<T> 包括默认实现 IEnumerator IEnumerable.GetEnumerator() {return IEnumerable_Helpers<T>.GetEnumerator(this);} static IEnumerable GetEnumerator(IEnumerable<T> it) {return it.GetEnumerator();} . 这样的特性将允许接口向其消费者提供更多的特性,而不必对实现者施加更多的工作。此外,与必须在调用站点静态绑定的扩展方法不同,此类接口方法将在实现处绑定,从而允许在适当时使用特定于实现的重写(例如,如果 提供 ToList 方法, List<T> 可以定义一个快速实现来创建一个新的 列表<T> 预初始化为正确大小并使用 Array.Copy 以及 它将返回无限的序列,这可能会引发异常(而不是吞噬所有可能获得的内存),但大多数实现不必使用该方法执行任何操作--它们可以简单地遵从默认的通用帮助函数,该函数将把项枚举到新的 列表<T>