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: 
Why not just `IEnumerable<>` + a custom interface with just an indexer?
Define a custom class for it that you can use in your interface 

```
public class Indexable<T>
{
    private readonly IList<T> _innerList;

    public Indexable(IList<T> innerList)
    {
        _innerList = innerList;
    }

    public T this[int index]
    {
        get { return _innerList[index]; }
        set { _innerList[index] = value; }
    }
}

```

Use it as

```
public interface MyStuff
{
    Indexable<int> MyIndexableCollectionOfInt { get; }
}

```