प्रकार IEnumerable<T>
इस तरह के संचालन का समर्थन नहीं करता है। IEnumerable<T>
इंटरफ़ेस का उद्देश्य एक उपभोक्ता को एक संग्रह की सामग्री को देखने की अनुमति देना है। मूल्यों को संशोधित करने के लिए नहीं।
जब आप जैसे संचालन करते हैं .ToList () जोड़ें। () आप एक नया बना रहे हैं List<T>
और उस सूची में एक मान जोड़ रहे हैं । इसका मूल सूची से कोई संबंध नहीं है।
आप जो भी कर सकते हैं, IEnumerable<T>
वह जोड़ा गया मूल्य के साथ एक नया बनाने के लिए जोड़ें विस्तार विधि का उपयोग करें ।
items = items.Add("msg2");
इस मामले में भी यह मूल IEnumerable<T>
वस्तु को संशोधित नहीं करेगा । यह एक संदर्भ धारण करके सत्यापित किया जा सकता है। उदाहरण के लिए
var items = new string[]{"foo"};
var temp = items;
items = items.Add("bar");
परिचालनों के इस सेट के बाद परिवर्तनीय अस्थायी अभी भी मूल्यों के सेट में एक एकल तत्व "फू" के साथ एक enumerable को संदर्भित करेगा, जबकि आइटम "foo" और "बार" के साथ एक अलग गणना योग्य का संदर्भ देंगे।
संपादित करें
मैं लगातार यह भूल जाता हूं कि Add एक विशिष्ट विस्तार विधि नहीं है IEnumerable<T>
क्योंकि यह उन पहले में से एक है जिसे मैं परिभाषित करता हूं। यह रहा
public static IEnumerable<T> Add<T>(this IEnumerable<T> e, T value) {
foreach ( var cur in e) {
yield return cur;
}
yield return value;
}
IEnumerable<T>
केवल संग्रह संग्रहण के लिए है। यह LINQ फ्रेमवर्क के लिए बैकबोन है। यह हमेशा इस तरह के रूप में कुछ अन्य संग्रह का एक अमूर्त हैCollection<T>
,List<T>
याArray
। इंटरफ़ेस केवल एक ऐसीGetEnumerator
विधि प्रदान करता है जो इसका एक उदाहरण देता है जोIEnumerator<T>
एक समय में एक संग्रह में एक आइटम को चलाने में सक्षम बनाता है। LINQ एक्सटेंशन विधियाँ इस इंटरफ़ेस द्वारा सीमित हैं।IEnumerable<T>
केवल इसलिए पढ़ा जा सकता है क्योंकि यह कई संग्रह के कुछ हिस्सों का प्रतिनिधित्व करता है।