Следуя правилам, которые публичные API никогда не должны возвращать список, я ослепляю преобразование всего кода, который возвратил списки, вместо ICollection<T>:
public IList<T> CommaSeparate(String value) {...}
становится
public ICollection<T> CommaSeparate(String value) {...}
И хотя ICollection имеет Count, нет способа получить элементы по этому индексу.
И хотя ICollection предоставляет перечислитель (разрешая foreach), я не вижу гарантии, что порядок перечисления начинается с "вершины" списка, а не "снизу".
я мог бы уменьшить это, избегая использования ICollection, и вместо этого используйте Collection:
public Collection<T> Commaseparate(String value) {...}
Это позволяет использовать синтаксис Items[index].
К сожалению, моя внутренняя реализация создает массив; который я может быть возвращен, чтобы вернуть IList или ICollection, но не как Collection.
Есть ли способы доступа к элементам коллекции в порядке?
Это вызывает более широкий вопрос: есть ли у ICollection порядок?
Концептуально, представить Я хочу проанализировать строку командной строки. Очень важно поддерживать порядок элементов.
Концептуально, мне нужен контракт, который указывает "упорядоченный" набор строковых кортежей. В случае контракта API для указания порядка, какое из следующего верно:
IEnumerable<String> Grob(string s)
ICollection<String> Grob(string s)
IList<String> Grob(string s)
Collection<String> Grob(string s)
List<String> Grob(string s)