ตรวจสอบว่ารายการว่างเปล่าอย่างมีประสิทธิภาพโดยใช้ LINQ ใน C#

เมื่อทำงานกับคอลเลกชันใน C# การตรวจสอบว่ารายการว่างหรือไม่สามารถเป็นงานทั่วไป อย่างไรก็ตาม คุณอาจสงสัยเกี่ยวกับวิธีที่ดีที่สุดในการทำเช่นนี้ โดยพิจารณาทั้งความเร็วและความอ่านง่าย วันนี้เราจะสำรวจวิธีต่าง ๆ ในการตรวจสอบว่ารายการว่างเปล่าและช่วยให้คุณหาวิธีที่เหมาะสมสำหรับความต้องการของคุณ

วิธีทั่วไปในการตรวจสอบการมีอยู่ของรายการว่าง

คุณอาจคุ้นเคยกับวิธีการทั่วไปสองสามวิธีในการตรวจสอบว่ารายการว่างหรือไม่ โดยเฉพาะอย่างยิ่งเมื่อทำงานกับ IEnumerable<T> นี่คือสองวิธีที่นิยม:

  1. ใช้ Count():
    if (myList.Count() == 0) { ... }
    
  2. ใช้ Any():
    if (!myList.Any()) { ... }
    

ความเร็ว vs. ความอ่านง่าย

แม้ว่าวิธีทั้งสองนี้จะทำงานสำเร็จ แต่มีผลกระทบที่แตกต่างกันในแง่ของประสิทธิภาพและความอ่านง่าย:

  • วิธี Count():

    • วิธีนี้นับจำนวนทุกองค์ประกอบในรายการ
    • หากรายการที่อยู่เบื้องหลังไม่ได้มีการใช้งานคุณสมบัติ Count ที่รวดเร็ว ก็อาจมีประสิทธิภาพต่ำกว่า เพราะต้อง traverse องค์ประกอบทั้งหมดเพื่อคืนค่าจำนวนเป็นศูนย์
  • วิธี Any():

    • วิธีนี้จะหยุดทันทีที่พบองค์ประกอบแรก
    • โดยทั่วไปจะเร็วกว่าด้วยเหตุผลที่ว่าไม่จำเป็นต้อง traverse ทั่วทั้งรายการหากรายการไม่ว่าง

เมื่อพิจารณาจากปัจจัยเหล่านี้ นักพัฒนาหลายคนจึงโน้มเอียงไปทางวิธี 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 เพื่อปรับปรุงโค้ดของคุณและรักษาฟังก์ชันการทำงาน