Nicht akzeptiert: Enumerable vs List

Ich habe in einem Team gearbeitet, in dem LINQ etwas unbeliebt war, weil es angeblich schwierig war, solchen Code zu debuggen. Wir hatten eine Vereinbarung: Nach jeder LINQ-Kette erstellt der Entwickler eine lokale Variable, in die er das Ergebnis von ToArray () schreibt. Ob das Array weiter unten in der Methode benötigt wird oder nur mit IEnumerable funktioniert. Vor der Rückgabe wurde das Ergebnis auch in ein Array umgewandelt. Es scheint, dass es in der gesamten Codebasis keine Methoden gab, die eine andere Sammlung als ein Array zurückgegeben oder akzeptiert haben.

Bärtiges Erbe! - Sie werden denken und Sie werden Recht haben. Trotz der Tatsache, dass viele Jahre vergangen sind, seit LINQ allgegenwärtig geworden ist und IDEs es Ihnen ermöglichen, Daten im Debug anzuzeigen, haben einige Entwickler immer noch eine schlechte Vorstellung von den Kriterien für die Auswahl eines Akzeptanz- und Rückgabetyps, wenn es um Sammlungen geht.

Was ist die Sammlung? Da BCL einen gleichnamigen Datentyp hat, ist es wichtig zu verstehen, dass eine Sammlung ein Datentyp ist, der für die Verarbeitung einer Gruppe von Elementen mit gemeinsamen Merkmalen (Datentyp) entwickelt wurde. Somit ist alles, was aufgezählt werden kann, eine Sammlung.

Bevorzugen Sie Abstraktionen

, , . , . ,   . , , .

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 .


, , , , .

Ich würde mich über Änderungen und Ergänzungen freuen. Ich empfehle Ihnen, sich mit den Framework Design Guidelines für Sammlungen vertraut zu machen .




All Articles