ตรวจสอบว่ารายการว่างเปล่าอย่างมีประสิทธิภาพโดยใช้ LINQ ใน C#
เมื่อทำงานกับคอลเลกชันใน C# การตรวจสอบว่ารายการว่างหรือไม่สามารถเป็นงานทั่วไป อย่างไรก็ตาม คุณอาจสงสัยเกี่ยวกับวิธีที่ดีที่สุดในการทำเช่นนี้ โดยพิจารณาทั้งความเร็วและความอ่านง่าย วันนี้เราจะสำรวจวิธีต่าง ๆ ในการตรวจสอบว่ารายการว่างเปล่าและช่วยให้คุณหาวิธีที่เหมาะสมสำหรับความต้องการของคุณ
วิธีทั่วไปในการตรวจสอบการมีอยู่ของรายการว่าง
คุณอาจคุ้นเคยกับวิธีการทั่วไปสองสามวิธีในการตรวจสอบว่ารายการว่างหรือไม่ โดยเฉพาะอย่างยิ่งเมื่อทำงานกับ IEnumerable<T>
นี่คือสองวิธีที่นิยม:
- ใช้
Count()
:if (myList.Count() == 0) { ... }
- ใช้
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 ไม่มี
}
การวิเคราะห์วิธีการขยาย
-
การตรวจสอบค่า Null:
- ก่อนที่จะดำเนินการ เป็นการดีที่จะตรวจสอบว่ารายการเป็น
null
เพื่อหลีกเลี่ยงข้อยกเว้น
- ก่อนที่จะดำเนินการ เป็นการดีที่จะตรวจสอบว่ารายการเป็น
-
การใช้
ICollection<T>
:- หากรายการใช้
ICollection<T>
จะใช้งานคุณสมบัติCount
ที่รวดเร็ว ช่วยให้ประสิทธิภาพที่ดีขึ้น
- หากรายการใช้
-
สำรองไปที่
Any()
:- หากวิธี
Count
ใช้งานไม่ได้ ก็จะใช้วิธีAny()
เป็นตัวสำรองที่เชื่อถือได้
- หากวิธี
สรุป
สรุปได้ว่า การตรวจสอบว่ารายการหรือคอลเลกชันว่างเปล่าใน C# สามารถทำได้หลายวิธี แต่ละวิธีมีข้อดีและข้อเสีย วิธีที่มีประสิทธิภาพที่สุดจะทำให้เกิดความสมดุลระหว่างประสิทธิภาพและความอ่านง่ายผ่านการสร้างวิธีการที่เป็นประโยชน์ ซึ่งไม่เพียงแต่ช่วยให้อ่านง่ายขึ้นในโค้ดของคุณเท่านั้น แต่ยังช่วยเพิ่มประสิทธิภาพโดยการใช้งานคุณสมบัติในตัวเมื่อมีอยู่
เมื่อคุณต้องการตรวจสอบว่ารายการว่างหรือไม่ในครั้งถัดไป คำนึงถึงการใช้วิธีการขยาย IsEmpty
เพื่อปรับปรุงโค้ดของคุณและรักษาฟังก์ชันการทำงาน