Имеет ли ICollection порядок?

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

27
задан Community 23 May 2017 в 12:02
поделиться