Ok, espero que la comunidad en general nos ayude a resolver un debate en el lugar de trabajo que ha estado en curso por 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:¿Cuál prefiere para las interfaces: T [], IEnumerable <T>, IList <T>, u otra?
public interface Foo
{
Bar[] Bars { get; }
IEnumerable<Bar> Bars { get; }
ICollection<Bar> Bars { get; }
IList<Bar> Bars { get; }
}
Mi preferencia es utilizar IEnumerable para los argumentos y las matrices de valores de retorno:
public interface Foo
{
void Do(IEnumerable<Bar> bars);
Bar[] Bars { get; }
}
Mi argumento a favor de este enfoque es que la clase de implementación puede crear una Haga una lista directamente desde IEnumerable y simplemente regrésela con List.ToArray(). Sin embargo, algunos creen que se debe 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 del cliente?
¿Qué usas/prefieres? (especialmente con respecto a las bibliotecas que serán utilizadas por otros desarrolladores fuera de su organización)
He visto los errores de mis formas. Como muchos afirman a continuación, es obvio que los desarrolladores no ven las propiedades T [] como Inmutable. Creo que mi abuso de ellos me ha enseñado algunos malos hábitos. Realmente nunca me importó si modificaron el conjunto, ya que era una copia, sin embargo, me he dado cuenta de la confusión que produce. IEnumerable es un manual ganador, creo. –