J'avais l'habitude de travailler dans une équipe où LINQ était légèrement détesté car il était supposé difficile de déboguer un tel code. Nous avions un accord: après chaque chaîne LINQ, le développeur crée une variable locale dans laquelle il écrit le résultat de ToArray (). Si le tableau est requis plus loin dans la méthode, ou qu'il ne fonctionne qu'avec IEnumerable. Avant le retour, le résultat était également converti en tableau, il semble qu'aucune méthode dans toute la base de code n'ait renvoyé ou accepté une collection autre qu'un tableau.
Héritage barbu! - vous penserez et vous aurez raison. Cependant, malgré le fait que de nombreuses années se sont écoulées depuis que LINQ est devenu omniprésent et que les IDE vous permettent d'afficher les données en débogage, certains développeurs ont encore une mauvaise idée des critères de choix d'un type d'acceptation et de retour en ce qui concerne les collections.
Pour commencer, quelle est la collection? Étant donné que BCL a un type de données du même nom, il est important de comprendre qu'une collection est un type de données conçu pour fonctionner sur un groupe d'éléments qui ont une caractéristique commune (type de données). Ainsi, tout ce qui peut être énuméré est une collection.
Préférez les abstractions
, , . , . , . , , .
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 .
, , , , .
Je serais heureux de recevoir des modifications et des ajouts, je recommande de lire les directives de conception-cadre pour les collections .