التحقق بشكل كفء مما إذا كان القائمة فارغة باستخدام LINQ في C#

عند العمل مع المجموعات في C#، يعتبر تحديد ما إذا كانت القائمة فارغة مهمة شائعة. ومع ذلك، قد تتساءل عن أفضل طريقة للقيام بذلك، خاصة عند اعتبار السرعة ووضوح الكود. اليوم، سنستكشف الطرق المختلفة للتحقق مما إذا كانت القائمة فارغة وسنساعدك في العثور على النهج المناسب لاحتياجاتك.

الطرق الشائعة للتحقق من قائمة فارغة

قد تكون على دراية ببعض الطرق الشائعة للتحقق من ما إذا كانت القائمة فارغة، خاصة عند التعامل مع IEnumerable<T>. إليك طريقتان شائعتان:

  1. استخدام Count():
    if (myList.Count() == 0) { ... }
    
  2. استخدام Any():
    if (!myList.Any()) { ... }
    

السرعة مقابل وضوح الكود

بينما ستنجز كلا الطريقتين المهمة، إلا أن لهما تداعيات مختلفة من حيث الأداء ووضوح الكود:

  • طريقة Count():

    • هذه الطريقة تقوم بعد جميع العناصر في القائمة.
    • إذا كانت القائمة الأساسية لا تحتوي على خاصية Count سريعة، فقد تكون أقل كفاءة لأنها تحتاج إلى التنقل عبر جميع العناصر لإرجاع عدد يساوي صفر.
  • طريقة Any():

    • هذه الطريقة تتوقف بمجرد أن تجد أول عنصر.
    • عادةً ما تكون أسرع لأنها لا تحتاج إلى التنقل عبر القائمة بأكملها إذا كانت القائمة غير فارغة.

في ضوء هذه العوامل، يميل العديد من المطورين إلى استخدام نهج Any() لأغراض الأداء في معظم الحالات.

حل محسن

قد تتساءل عما إذا كان هناك حل أكثر أناقة يجمع بين السرعة وسهولة الاستخدام. النهج الأمثل هو إنشاء طريقة تمديد تتحقق من فراغ القائمة مع استيعاب أنواع المجموعات المختلفة. إليك كيف يمكنك القيام بذلك:

public static bool IsEmpty<T>(this IEnumerable<T> list)
{
    if (list is ICollection<T> collection)
    {
        return collection.Count == 0; // تستخدم خاصية Count الخاصة بـ ICollection إذا كانت متاحة.
    }
    return !list.Any(); // التراجع إلى Any() إذا لم تكن Count متاحة.
}

تحليل طريقة التمديد

  1. التحقق من القيمة null:

    • قبل المتابعة، من الحكمة التحقق مما إذا كانت القائمة null لتجنب الاستثناءات.
  2. استخدام ICollection<T>:

    • إذا كانت القائمة تنفذ ICollection<T>، فإنها ستستخدم خاصية Count السريعة، مما يوفر أداءً فعالًا.
  3. التراجع إلى Any():

    • إذا لم تكن طريقة Count قابلة للتطبيق، فستستخدم طريقة Any() كتراجع موثوق.

الخلاصة

في الختام، يمكن التحقق مما إذا كانت القائمة أو المجموعة فارغة في C# بعدة طرق، كل منها له مزاياه وعيوبه. الطريقة الأكثر كفاءة تحقق توازنًا بين الأداء ووضوح الكود من خلال إنشاء طريقة مساعدة. وهذا لا يبسط القراءة في الكود الخاص بك فحسب، بل يُحسن أيضًا الأداء من خلال الاستفادة من الخصائص المدمجة حيثما كان ذلك ممكنًا.

عند الحاجة لاحقًا للتحقق مما إذا كانت القائمة فارغة، فكر في اعتماد طريقة التمديد IsEmpty لتبسيط قاعدة كودك والحفاظ على الوظائف.