Comparación entre Lista, IList e IEnumerable

Tengo una aplicación de C # en la que manejo algunos tipos de colecciones. Necesito saber cuales son las diferencias entre estos tipos:

  1. List
  2. IList
  3. IEnumerable

¿Cuáles son las ventajas para cada uno en comparación con los demás?

  • IEnumerable es la interfaz base que se extiende o implementa a continuación. No permite el acceso directo y es de solo lectura. Entonces, use esto solo si tiene la intención de iterar sobre la colección.

  • ICollection extiende IEnumerable pero además permite agregar, eliminar, probar si un elemento está presente en la colección y obtener el número total de elementos. No permite acceder directamente a un elemento por índice. Esa sería una operación O (n), ya que necesita comenzar a iterar sobre ella hasta que encuentre el elemento correspondiente.

  • IList extiende ICollection (y, por lo tanto, hereda todas sus propiedades), pero además permite acceder directamente a los elementos mediante un índice. Es una operación O (1).

  • List es solo una implementación concreta de la interfaz IList .

En su código, siempre debe exponer el tipo más alto en la jerarquía de objetos que corresponderá a las necesidades de las personas que llaman. Así, por ejemplo, si los llamantes solo van a enumerar sobre el conjunto de datos, use IEnumerable . Si necesitan tener acceso directo a los elementos por índice, exponga un IList .

List solo debe ser utilizada internamente por su código, pero generalmente no está presente en la firma de los métodos que está exponiendo. Esto le da más flexibilidad, ya que podría intercambiar fácilmente la implementación concreta sin romper el contrato.