可索引的界面

Bri*_*ett 19 c# interface

如果我只想索引一个类型的实例,应该使用什么C#接口?我不需要(或想要)添加/删除/编辑元素的功能.枚举是可以的.这需要自定义IIndexable类型吗?

在这种情况下IList是过度杀伤,因为它强制实现我不想拥有的成员.

Mei*_*hes 24

作为.NET 4.5的(可以说)正确的方法是使用现在IReadOnlyList<T>,从派生IReadOnlyCollection<T>,它从派生IEnumerable<T>

  • IReadOnlyList<T> 给你索引器
  • IReadOnlyCollection<T> 为您提供集合Count属性.
  • IEnumerable<T> 为您提供集合枚举器.

它尽可能轻盈.

直接实现的核心类IReadOnlyList:

  • +1 这是 .NET 4.5+ 的最佳方法。通用集合(`List&lt;T&gt;`)和数组(`T[]`)都实现了`IReadOnlyList&lt;T&gt;`,因此它们可以透明地传递,有效地使它们对消费者来说是不可变的。几年前我实现了自己的 [`IIndexable&lt;T&gt;`](http://www.codeproject.com/Articles/233738/IIndexable-a-true-read-only-list-interface) 版本,现在是过时的。 (2认同)

Luc*_*ero 12

IList<> (假设您希望保持通用)是包含索引器的唯一接口.

但是,您可以只显式实现并抛出NotSupportedException您不想支持的所有操作,或者仅实现IEnumerable<>并将其余操作仅限于类,而不是在接口中.