Siguiendo las reglas que a public APIs should never return a list, estoy cegadoras convertir todo el código que regresó listas, para volver ICollection<T>
lugar:¿Hay un pedido de ICollection <T>?
public IList<T> CommaSeparate(String value) {...}
convierte
public ICollection<T> CommaSeparate(String value) {...}
Y aunque un ICollection
tiene un Count
, no hay forma de obtener elementos por ese índice.
Y aunque un ICollection
expone un enumerador (que permite foreach
), no veo ninguna garantía de que el orden de enumeración comience en la "parte superior" de la lista, en lugar de "abajo".
i podría mitigar este evitando el uso de ICollection
, y en lugar de utilizar Collection
:
public Collection<T> Commaseparate(String value) {...}
Esto permite el uso de una sintaxis Items[index]
.
Desafortunadamente, mi implementación interna construye una matriz; cuál yo puede ser lanzado para volver IList
o ICollection
, pero no como Collection
.
¿Hay alguna manera de acceder a los elementos de una colección en el pedido?
Esto plantea la pregunta más amplia: ¿Un ICollection aun tienen un pedido?
Conceptualmente, imaginar Quiero analizar una cadena de línea de comandos. Es crítico que se mantenga el orden de los artículos.
Conceptualmente, requiero un contrato que indique un conjunto "ordenado" de tuplas de cadenas. En el caso de un contrato de API, para indicar el orden, cuál de las siguientes es correcta:
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)
Como comentario aparte, creo que leyó mal el artículo original que cita como base para su refactorización. Dice que no pase instancias de 'List' (la clase), no 'IList ' (la interfaz). Es perfectamente legítimo en mi humilde opinión pasar 'IList 'si la interfaz requiere acceso indexado. –
¿Qué pasa con IOrderedEnumerable, que devuelve LINQ OrderBy? – Euphoric