غير مقبول: عددي مقابل قائمة

اعتدت أن أعمل في فريق حيث كان LINQ غير محبوب قليلاً لأنه كان من الصعب تصحيح مثل هذا الرمز. كان لدينا اتفاق: بعد كل سلسلة LINQ ، ينشئ المطور متغيرًا محليًا يكتب نتيجة ToArray (). ما إذا كانت المصفوفة مطلوبة لأسفل الطريقة ، أم أنها تعمل فقط مع IEnumerable. قبل الإرجاع ، تم أيضًا تحويل النتيجة إلى مصفوفة ، ويبدو أنه لا توجد عمليات في قاعدة الكود بأكملها تعيد أو تقبل مجموعة غير المصفوفة.

تراث الملتحي! - سوف تفكر وستكون على حق. ومع ذلك ، على الرغم من حقيقة أن العديد من السنوات قد مرت منذ أن أصبح LINQ في كل مكان وأن IDEs يسمح لك بمشاهدة البيانات في التصحيح ، لا يزال بعض المطورين لديهم فكرة سيئة عن معايير اختيار نوع القبول والعودة عندما يتعلق الأمر بالمجموعات.

بادئ ذي بدء ، ما هي المجموعة؟ نظرًا لأن BCL لها نوع بيانات يحمل نفس الاسم ، فمن المهم أن نفهم أن المجموعة هي نوع بيانات مصمم للعمل على مجموعة من العناصر التي لها بعض الخصائص المشتركة (نوع البيانات). وبالتالي ، فإن أي شيء يمكن تعداده هو مجموعة.

تفضل التجريد

, , . , . ,   . , , .

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 .


, , , , .

سأكون سعيدًا بالتعديلات والإضافات ، أوصي بأن تتعرف على إرشادات تصميم الإطار للمجموعات .




All Articles