c# - 使用 IEnumerable 与 ICollection 与 IList 的自定义集合

标签 c# ienumerable ilist icollection custom-collection

我需要设计自己的定制GenericCollection类(class)。现在我有很多选择可以使用 IEnumerable 导出它, ICollection , 和 IList ,稍后会提供一些附加功能。

如果我选择 IEnumerable<T>,我有点困惑我可能需要声明对象以实际保存集合,就像在这种情况下一样 _list .

public class GenericCollection<T> : IEnumerable<T>
{
    private List<T> _list;
    //...
}

但如果我选择 ICollection<T>IList<T> , 我不需要申报 List对象,因为它是隐式可用的。

public class GenericCollection<T> : IList<T>
{
    // no need for List object
    //private List<T> _list; 
    //...
}

这两种方法在性能方面有什么区别?

在哪种情况下,每个人都是首选,尤其是在设计您自己的系列时。我对性能良好的轻量级系列感兴趣。我认为这可以使用 IEnumerable<T> 来实现但究竟如何以及一些强有力的理由一起去呢?

我查看了一些现有的帖子,但没有一个提供所需的信息。

Returning 'IList' vs 'ICollection' vs 'Collection'

最佳答案

IEnumerable , ICollection , 和 IList (通常,任何带有 I 前缀的类型)都只是 interfaces .他们让你展示你的类(class)将做什么,但不像你 inherit一个类,接口(interface)不会为您提供他们说您必须做的任何事情的默认实现。

就选择哪个接口(interface)而言,这里有一个快速指南:

  • IList是一个 ICollection可以通过索引访问。
  • ICollection是一个 IEnumerable可以轻松访问 Add 等内容, Remove , 和 Count .
  • IEnumerable是任何可以枚举的事物,即使这些事物的列表在您枚举之前不存在。

您可能希望为您的集合扩展(或保留为运行大部分逻辑的私有(private)字段)的一些类是 List<T> , Collection<T> , (它实现了 IList<T> ,但更容易访问覆盖实现,请参阅 Collection<T> versus List<T> what should you use on your interfaces? 了解这两者之间的巨大差异) ObservableCollection<T> ,或不是列表的集合,例如 Dictionary<T, U>HashSet<T> .有关其中任何一个的更多信息,请查看有关该类的 MSDN 文档。

关于c# - 使用 IEnumerable 与 ICollection 与 IList 的自定义集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157122/

相关文章:

c# - 转换字典<int, List<User>>

C# - 使用泛型的反射 : Problem with Nested collections of ILists

c# - 异常 - 请求的资源只能通过 SSL 访问

c# - 如何深度克隆 C# 中的互连对象?

c# - 如何获取本地鼠标位置

C# IEnumerable.Count() 抛出 IndexOutOfRangeException

c# - 可以打开一个不存在的数据库的连接,这怎么可能?

c# - 是否可以在不破坏二进制兼容性的情况下升级到 Generic IEnumerable

vb.net - 将 IList<Object> 转换为 List<String>

c# - 我有一个包含超过一百万个对象的列表,试图找到最快的搜索方式