मेरे लिए, IEnumerable<T>
सी # (अच्छी तरह से, .NET) में डेटा के मनमानी सेट को इंगित करता है जिसे पुनरावृत्त किया जा सकता है। इसे किसी भी चीज़ द्वारा समर्थित किया जा सकता है, जैसे SELECT
क्वेरी, किसी सरणी की सामग्री, कंसोल में उपयोगकर्ता द्वारा टाइप किए गए वर्ण, या पीआई के अंक। डेटा को इंडेक्स द्वारा संदर्भित नहीं किया जा सकता है, यह आवश्यक रूप से परिमित या अनंत नहीं है, न ही इसे संशोधित किया जा सकता है। यादृच्छिक संख्याओं के IEnumerable<double>
की तरह, बाद में समान रूप से कॉल किए जाने पर यह डेटा का एक अलग सेट भी हो सकता है। यह उपभोक्ता को foreach
लूप जैसे उत्पादित आंकड़ों की बिट्स है।क्या ऑर्डर प्रासंगिकता IENumerable <T> के साथ निहित है या यह स्पष्ट होना चाहिए?
अब किसी अन्य चीज़ में एक अवधारणा पर विचार करें जो डेटा सेट से संबंधित है: एसक्यूएल। एसक्यूएल में, पंक्तियों का क्रम स्पष्ट रूप से निर्दिष्ट होने तक गारंटी नहीं है और प्रासंगिक नहीं है। उदाहरण के लिए, यदि आप SELECT * FROM stack_overflow_posts LIMIT 1
करते हैं, तो डेटाबेस द्वारा कोई निहितार्थ नहीं किया गया है कि जिस पंक्ति को आप वापस प्राप्त करते हैं वह वास्तव में पहली पंक्ति है जो डाली गई थी, न ही सबसे पुरानी पंक्ति। उदाहरण के लिए, आपको ORDER BY posted_date_time
के साथ परिणामों को स्पष्ट रूप से ऑर्डर करने की आवश्यकता है।
क्या यह वही अवधारणा IEnumerable<T>
के साथ .NET में गणनाओं पर लागू होती है? IEnumerable<T>
का उपयोग एक प्रभाव है कि परिणाम हमेशा एक विशेष क्रम में पैदा किया जाएगा? उदाहरणों में मैंने पहले दिए गए उदाहरणों में, मैं हाँ कहूंगा, आदेश लागू किया जाएगा, क्योंकि यदि वे एक अलग क्रम में गणना की गई थी, तो परिणाम व्यर्थ होंगे; यदि आपको वास्तविक कुंजीस्ट्रोक की तुलना में कंसोल में उपयोगकर्ता द्वारा टाइप किए गए वर्ण मिलते हैं, तो उन्हें पढ़ने का क्या मतलब है? स्पष्ट रूप से LINQ के पास OrderBy()
परिणाम देने के लिए परिणाम हैं, लेकिन यह स्पष्ट आदेश है, अंतर्निहित नहीं है।
एक इंटरफ़ेस को लागू करने वाला एक वर्ग प्रभावी रूप से इंटरफ़ेस द्वारा परिभाषित विधियों को लागू न करने के लिए एक विशेष पैटर्न का पालन करने का वादा कर रहा है। IEnumerable<T>
का अर्थ है कि इसका डेटा किसी प्रासंगिक क्रम में प्रस्तुत किया जाएगा, या क्या यह गणना करने के लिए गणना के उपभोक्ताओं तक स्पष्ट रूप से आदेश देने के लिए है? यदि मेरे पास ऐसी विधि है जो आइटम को एक अनिर्धारित क्रम में उत्पन्न करती है - या बल्कि, एक आदेश जो उपभोक्ताओं के लिए प्रासंगिक नहीं है और किसी भी बिंदु पर परिवर्तन के अधीन है - क्या मुझे IEnumerable<T>
के अलावा कुछ और उपयोग करना चाहिए?
मैं जोड़ता हूं कि ['IOrderedEnumerable'] (http://msdn.microsoft.com/en-ca/library/vstudio/bb534852 (v = vs.100) .aspx) आदेशित मामले के लिए है । ('ऑर्डर बी 'इसे वापस करता है) –
Vache