Qual você prefere para interfaces: T [], IEnumerable <T>, IList <T> ou outro?
Ok, eu estou esperando que a comunidade em geral nos ajude a resolver um debate no local de trabalho que está em andamento há algum tempo. Isso tem a ver com a definição de interfaces que aceitam ou retornam listas de algum tipo. Existem várias maneiras de fazer isso:
public interface Foo
{
Bar[] Bars { get; }
IEnumerable<Bar> Bars { get; }
ICollection<Bar> Bars { get; }
IList<Bar> Bars { get; }
}
Minha preferência é usar IEnumerable para argumentos e matrizes para valores de retorno:
public interface Foo
{
void Do(IEnumerable<Bar> bars);
Bar[] Bars { get; }
}
Meu argumento para essa abordagem é que a classe de implementação pode criar uma List diretamente do IEnumerable e simplesmente retorná-la com List.ToArray (). No entanto, alguns acreditam que o IList deve ser retornado em vez de um array. O problema que tenho aqui é que agora é necessário novamente copiá-lo com um ReadOnlyCollection antes de retornar. A opção de retornar IEnumerable parece problemático para o código do cliente?
O que você usa / prefere? (especialmente com relação a bibliotecas que serão usadas por outros desenvolvedores fora da sua organização)