यदि सूची खाली है, तो यह निर्धारित करने के लिए "सर्वोत्तम" (गति और पठनीयता दोनों को ध्यान में रखते हुए) तरीका क्या है? भले ही सूची प्रकार की हो IEnumerable<T>और उसके पास काउंट प्रॉपर्टी न हो।
अभी मैं इसके बीच में उछाल रहा हूं:
if (myList.Count() == 0) { ... }
और इस:
if (!myList.Any()) { ... }
मेरा अनुमान है कि दूसरा विकल्प तेज है, क्योंकि यह पहला आइटम देखते ही वापस आ जाएगा, जबकि दूसरा विकल्प (एक IEnumerable के लिए) को गिनती वापस करने के लिए प्रत्येक आइटम पर जाने की आवश्यकता होगी।
कहा जा रहा है, क्या दूसरा विकल्प आपके लिए पठनीय है? तुम किसे वरीयता दोगे? या क्या आप एक खाली सूची के लिए परीक्षण करने का बेहतर तरीका सोच सकते हैं?
संपादित करें @ lassevk की प्रतिक्रिया सबसे तार्किक, क्रम का एक सा इस तरह, एक कैश्ड गिनती यदि संभव हो तो उपयोग करने के लिए जाँच के साथ मिलकर प्रतीत हो रहा है:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()बराबर नहीं है list.IsEmpty? फ्रेमवर्क विधि को अनुकूलित किया जाना चाहिए - यह केवल एक नया लिखने के लायक है अगर आपको यह पता चला है कि यह एक आदर्श अड़चन है।
IsEmptyएक्सटेंशन मेथड जोड़ता है । github.com/dotnet/corefx/issues/35054 कृपया जाँचें और वोट करें अगर आपको पसंद है और सहमत हैं।
isऔरcastउपयोग नहीं करते हैंasऔरnullICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;