Следуя правилам, которые публичные 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)