¿Cuál prefieres para las interfaces: T [], IEnumerable <T>, IList <T> u otra?
Bien, espero que la comunidad en general nos ayude a resolver un debate sobre el lugar de trabajo que ha estado en curso durante un tiempo. Esto tiene que ver con la definición de interfaces que aceptan o devuelven listas de algún tipo. Hay varias maneras de hacer esto:
public interface Foo
{
Bar[] Bars { get; }
IEnumerable<Bar> Bars { get; }
ICollection<Bar> Bars { get; }
IList<Bar> Bars { get; }
}
Mi preferencia es usar IEnumerable para argumentos y matrices para valores de retorno:
public interface Foo
{
void Do(IEnumerable<Bar> bars);
Bar[] Bars { get; }
}
Mi argumento para este enfoque es que la clase de implementación puede crear una Lista directamente desde IEnumerable y simplemente devolverla con List.ToArray (). Sin embargo, algunos creen que se debería devolver IList en lugar de una matriz. El problema que tengo aquí es que ahora es necesario volver a copiarlo con ReadOnlyCollection antes de volver. La opción de devolver IEnumerable parece problemática para el código de cliente?
¿Qué usas / prefieres? (especialmente con respecto a las bibliotecas que serán utilizadas por otros desarrolladores fuera de su organización)