Esta regla puede ser realmente ruidosa, pero hay algunas razones muy válidas para evitar List<T>
en el código de la biblioteca. Todo depende del contexto. Aquí hay algunas cosas a considerar antes de deshabilitar la regla o la supresión de un suceso determinado:
List<T>
es a menudo una mala elección para los parámetros de entrada ya que obliga a las personas que llaman para copiar datos de forma innecesaria. He visto muchos códigos que declaran parámetros como List<T>
o T[]
cuando IEnumerable<T>
sería suficiente.
List<T>
puede ser una opción pobre para las propiedades también. Considere las siguientes alternativas:
public class Course {
public List<Course> Prerequisites { get; }
}
public class Course {
public Collection<Course> Prerequisites { get; }
}
La intención es que la persona que llama puede cambiar los requisitos previos de un curso modificando la colección. En ese caso, si usamos List<Course>
, no hay forma de que se notifique la clase Course
cuando cambian los requisitos previos ya que List<T>
no proporciona ninguna devolución de llamada de modificación. Como tal, usar List<T>
en este contexto es como tener arbitrariamente muchos campos públicos. Por otro lado, podemos subclase Collection<T>
y anular sus virtuales para recibir notificaciones de cambios.
List<T>
funciona mejor como un valor de retorno cuando la propiedad completa de la colección se transfiere a la persona que llama. Esta es la razón por la cual Enumerable.ToList()
es realmente perfectamente razonable y no viola el espíritu de la regla.
Ahora que lo pienso, lo que permite List<T>
como un valor de retorno de métodos, pero continuando con la bandera List<T>
propiedades y los parámetros, probablemente mejorará en gran medida la señal de la regla a ruido ...
reglas de bloqueo se como hacer trampa sin ? ... las reglas existen por una razón. – Fraga
@Fraga, No, no es hacer trampa y a menudo desactivo ciertas reglas por diversos motivos. No son verdades universales y con frecuencia se interponen en el camino del diseño de bibliotecas de calidad. – JaredPar
Son más como "pautas" de todos modos. –