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