2013-11-23 3 views
28

के बीच तुलना मेरे पास एक सी # एप्लिकेशन है जिसमें मैं कुछ संग्रह प्रकार संभालता हूं। मैं इन प्रकार के बीच क्या मतभेद जानने की जरूरत:सूची, IList और IENumerable

  1. List
  2. IList
  3. IEnumerable

क्या दूसरों के साथ तुलना में हर एक के लिए लाभ कर रहे हैं?

उत्तर

66
  • IEnumerable<T> आधार इंटरफेस है कि बढ़ाने या लागू पीछा कर रहा है। यह प्रत्यक्ष पहुंच की अनुमति नहीं देता है और केवल पढ़ा जाता है। तो इसका उपयोग केवल तभी करें जब आप संग्रह पर पुन: प्रयास करना चाहते हैं।

  • ICollection<T>IEnumerable<T> बढ़ाता है लेकिन इसके अलावा संग्रह में तत्व मौजूद है या तत्वों की कुल संख्या प्राप्त करने के लिए यह जांचने, हटाने, अनुमति देने की अनुमति देता है। यह इंडेक्स द्वारा सीधे तत्व को एक्सेस करने की अनुमति नहीं देता है। यह एक ओ (एन) ऑपरेशन होगा क्योंकि आपको उस पर पुनरावृत्ति शुरू करने की आवश्यकता है जब तक आपको संबंधित तत्व नहीं मिल जाता।

  • IList<T>ICollection<T> (और इस प्रकार यह सभी गुणों को प्राप्त करता है) बढ़ाता है लेकिन इसके अलावा सूचकांक द्वारा सीधे तत्वों तक पहुंचने की अनुमति देता है। यह एक ओ (1) ऑपरेशन है।

  • List<T>IList<T> इंटरफ़ेस का एक ठोस कार्यान्वयन है।

अपने कोड आप हमेशा प्रकार है कि वस्तु पदानुक्रम है कि कॉल करने की जरूरतों के अनुरूप होगा में सबसे ज्यादा है बेनकाब करना चाहिए

। तो उदाहरण के लिए यदि कॉलर केवल डेटासेट पर गणना करने जा रहे हैं, तो IEnumerable<T> का उपयोग करें। अगर उन्हें इंडेक्स द्वारा तत्वों तक सीधी पहुंच की आवश्यकता है तो IList<T> का पर्दाफाश करें।

List<T> केवल आपके कोड द्वारा आंतरिक रूप से उपयोग किया जाना चाहिए, लेकिन आमतौर पर आपके द्वारा प्रकट किए जा रहे तरीकों के हस्ताक्षर में मौजूद नहीं है। यह आपको अधिक लचीलापन देता है क्योंकि आप आसानी से अनुबंध को तोड़ने के बिना ठोस कार्यान्वयन को स्वैप कर सकते हैं।

+0

धन्यवाद, यह स्पष्ट है। प्रतिक्रिया समय के लिए, जब मैं किसी तत्व को खोजने या संग्रह को सॉर्ट करने का प्रयास करता हूं, तो उनमें से सबसे अच्छा क्या है? –

+5

LINQ का उपयोग करके आप इसे 'IENumerable ' के साथ प्राप्त कर सकते हैं। –

+0

यह एक महान संसाधन है, हैशसेट इसे फिट करता है? – Evonet

संबंधित मुद्दे