No aceptado: enumerable vs lista

Solía ​​trabajar en un equipo donde LINQ no me gustaba un poco porque supuestamente era difícil depurar dicho código. Tuvimos un acuerdo: después de cada cadena LINQ, el desarrollador crea una variable local en la que escribe el resultado de ToArray (). Si la matriz se requiere más abajo en el método o solo funciona con IEnumerable. Antes de la devolución, el resultado también se convertía en una matriz, parece que no había métodos en todo el código base que devolvieran o aceptaran una colección que no fuera una matriz.

¡Legado barbudo! - pensarás y tendrás razón. Sin embargo, a pesar de que han pasado muchos años desde que LINQ se volvió omnipresente y los IDE le permiten ver los datos en depuración, algunos desarrolladores todavía tienen una mala idea de los criterios para elegir un tipo de aceptación y devolución cuando se trata de colecciones.

Para empezar, ¿qué es la colección? Dado que BCL tiene un tipo de datos del mismo nombre, es importante comprender que una colección es un tipo de datos diseñado para operar en un grupo de elementos que tienen alguna característica común (tipo de datos). Por tanto, todo lo que pueda enumerarse es una colección.

Prefiere abstracciones

, , . , . ,   . , , .

Lazy loading

- (  IEnumerable)  , .  IList, , .   ,  lazy loading, — . . , 'Lazy' , , .

IReadOnlyCollection

, ,  IArray, IReadOnlyCollection,  -. 

namespace System.Collections.Generic 
{ 
  public interface IReadOnlyCollection : IEnumerable, IEnumerable 
  { 
    int Count { get; } 
  }
}

 -  4.5,  read-only . Array, List,  IList.

 IEnumerable  … ,  IReadOnlyCollection,       List. , -   List.

 Array  IReadOnlyCollection  List, .  IList    .

null

,  ,  ,  , ,  , ,  null.  null, .  - null  0 . 1  null,  null, ,  . :

 if(myEnumerable != null) 
 { 
   foreach(var item in myEnumerable) 
   { 
   } 
 }  

,   :

foreach(var item in myEnumerable ?? Enumerable.Empty<T>()) 
{
}

IEnumerable/ICollection/IList

, , :

IEnumerable

, -,

IReadOnlyCollection : IEnumerable

-,

ICollection : IEnumerable

, (IsReadOnly)

IReadOnlyList : IReadOnlyCollection

,

IList : ICollection

,

, , . , . IEnumerable , - ICollection, IList…   .

, , , . , , IReadOnlyCollection. IEnumerable , , , — -. lazy loading, IList ICollection, —  read-only .

Web API HTTP

HTTP, , -. , , , IEnumerable IList.

, HTTP JSON -  , . , (Newtonsoft.Json, System.Text.Json), List. \ - . IEnumerable response .


, , , , .

Me agradaría recibir enmiendas y adiciones. Le recomiendo que se familiarice con las Directrices de diseño del marco para colecciones .




All Articles