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