Question: What C# interface should be used if I only want to be able to index into instances of a type? I don't need (or want) the ability to add/remove/edit elements. Enumeration is okay. Does this require a custom `IIndexable` type?

In this case `IList` is overkill because it forces implementation of members I don't want to have.

Answer: 
As of .Net 4.5 the (arguably) right way is now to use [`IReadOnlyList<T>`](http://msdn.microsoft.com/en-us/library/hh192385%28v=vs.110%29.aspx), which derives from [`IReadOnlyCollection<T>`](https://msdn.microsoft.com/en-us/library/hh881542%28v=vs.110%29.aspx), which derives from [`IEnumerable<T>`](https://msdn.microsoft.com/en-us/library/9eekhta0%28v=vs.110%29.aspx)

* `IReadOnlyList<T>` gives you the indexer
* `IReadOnlyCollection<T>` gives you the collection Count property.
* `IEnumerable<T>` gives you the collection Enumerator.

Its about as light as you can make it. 

Core classes that directly implement `IReadOnlyList`:

* [`List<T>`](https://msdn.microsoft.com/en-us/library/6sh2ey19%28v=vs.110%29.aspx)
* [`Collection<T>`](https://msdn.microsoft.com/en-us/library/ms132397%28v=vs.110%29.aspx)
* [`ReadOnlyCollection<T>`](https://msdn.microsoft.com/en-us/library/ms132474%28v=vs.110%29.aspx)
* [`ArraySegment<T>`](https://msdn.microsoft.com/en-us/library/1hsbd92d%28v=vs.110%29.aspx)
* [`T[]`](https://stackoverflow.com/a/18042379/1657476)
Why not just `IEnumerable<>` + a custom interface with just an indexer?