2008-12-18 11 views
136

जब मेरे पास चीजों की सूचियों के साथ मेरे डोमेन में इकाइयां हैं, तो क्या उन्हें ILists या IENumerables के रूप में उजागर किया जाना चाहिए? जैसे आदेश ऑर्डरलाइन का एक गुच्छा है।संस्थाओं पर संग्रह के लिए ILI बनाम IENumerable

+0

क्या दोनों को लागू करना बुद्धिमान होगा? – PedroC88

+4

यह नहीं होगा। आईएलयूमेरेबल से एक आईएलिस्ट विरासत में आता है। – Unknown1987

उत्तर

177

IEnumerable<T> उन वस्तुओं की एक श्रृंखला का प्रतिनिधित्व करता है जिन्हें आप पुन: सक्रिय कर सकते हैं (उदाहरण के लिए foreach का उपयोग करके), जबकि IList<T> एक संग्रह है जिसे आप जोड़ या निकाल सकते हैं।

आमतौर पर आप ऑर्डरलाइन को जोड़कर या निकालकर ऑर्डर को संशोधित करने में सक्षम होना चाहते हैं, तो शायद आप ऑर्डर चाहते हैं। लाइन IList<OrderLine> हो।

ऐसा कहकर, कुछ फ्रेमवर्क डिजाइन निर्णय लेना चाहिए जो आपको करना चाहिए। उदाहरण के लिए, क्या ऑर्डरलाइन के दो अलग-अलग ऑर्डर में एक ही उदाहरण जोड़ना संभव हो सकता है? शायद ऩही। इसलिए दिया गया है कि आप ऑर्डरलाइन को ऑर्डर में जोड़ना चाहिए या नहीं, आप वास्तव में लाइन्स प्रॉपर्टी को केवल IEnumerable<OrderLine> के रूप में सतह पर रखना चाहते हैं, और एड (ऑर्डरलाइन) और निकालें (ऑर्डरलाइन) विधियां प्रदान कर सकते हैं जो कर सकते हैं उस सत्यापन को संभाल लें।

+4

यदि आप सामग्री को सूचीबद्ध करने की आवश्यकता है तो आप 'IReadOnlyList' या' IReadOnlyCollection' का भी उपयोग कर सकते हैं लेकिन आप इसे जोड़ना या निकालना नहीं चाहते हैं। – julealgon

+0

फिर 'IReadOnlyList' का कोई मतलब नहीं है। – ajeh

22

अधिकांश समय मैं आईनेस्ट के साथ आईएनयूमेरेबल पर जा रहा हूं क्योंकि आईनेमेरेबल में गिनती विधि नहीं है और आप एक इंडेक्स के माध्यम से संग्रह तक नहीं पहुंच सकते हैं (हालांकि यदि आप LINQ का उपयोग कर रहे हैं तो आप विस्तार के साथ इसे प्राप्त कर सकते हैं विधि)।

+1

मेरा मानना ​​है कि आप हमेशा IEnumerable के साथ एक IList कार्यान्वयन का दृष्टांत कर सकते हैं गणना विधि और उदाहरण के लिए की तरह उपयोग करने के लिए की जरूरत है: IEnumerable गणनीय = <कुछ-IEnumerable> सूची MyList = नई सूची (गणनीय); हालांकि, कैसे आप अपने संग्रह जैसे कि क्या आप संग्रह संपत्ति अपरिवर्तनीय होना चाहता हूँ (IEnumerable आप संग्रह संशोधित करने की अनुमति would't) या नहीं के रूप में विचार पर निर्भर होना चाहिए बेनकाब (IList पढ़ें) – dotnetguy

+9

IEnumerable .Count() के लिए जाँच करता है देखें कि अंतर्निहित प्रकार एक आईसीओलेक्शन है जो एक गणना गुण लागू करता है। – andleer

+0

"आप एक अनुक्रमणिका के माध्यम से संग्रह तक नहीं पहुंच सकते" - 'ElementAt' विधि के बारे में क्या? – ivamax9

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