ये गाइडलाइन उन विधियों को बढ़ावा देने के लिए मौजूद हैं जो पैरामीटर के रूप में स्वीकार किए जाते हैं और वे लौटने वाले प्रकार के रूप में क्या लौटते हैं।
यदि आप किसी विधि से List<T>
वापस करते हैं, तो यह विधि कभी भी List<T>
पर कुछ भी वापस नहीं लौटा सकती है। यह कुछ परिदृश्यों में ठीक हो सकता है लेकिन दूसरों में ऐसा नहीं है। उदाहरण के लिए, एक ऐसी विधि पर विचार करें जो एक निश्चित अवधि के दौरान लॉग इन करने वाले उपयोगकर्ताओं का संग्रह देता है। यदि यह विधि केवल List<T>
लौटाती है, तो उसे सभी उपयोगकर्ताओं को एक ही पास में प्राप्त करना और वापस करना होगा क्योंकि वे List
के अर्थशास्त्र हैं: जैसे ही विधि वापस आती है, आपको कुल गणना के साथ सभी आइटम मिलते हैं। यह एक समस्या हो सकती है, यदि उपयोगकर्ताओं की संख्या हजारों हजारों है - सभी रिकॉर्ड प्राप्त करने में लंबा समय लग सकता है और वे बहुत सारी मेमोरी ले सकते हैं। फोन करने वाले वस्तुओं के संग्रह के माध्यम से पुनरावृति कर सकते हैं, लेकिन एक ही बार में सभी आइटम नहीं मिल -
इस विधि एक IEnumerable<T>
वापसी होगी, तो उसके लिए गिनती या बार में सभी आइटम होने का कोई वादा है। यह कॉल करने की विधि को ऑब्जेक्ट (IEnumerable<T>
लागू करने) को वापस करने की अनुमति देता है जो डेटा को छोटे बैचों में एकत्र करता है और अनुरोध के अनुसार उन्हें एक-एक करके देता है।
इसके अलावा, कई अलग अलग संग्रह प्रकार IEnumerable<T>
लागू है, तो इस विधि का एक और कार्यान्वयन वास्तव में एक सूची उदाहरण, IEnumerable<T>
लिए डाली वापस जाने के लिए तय कर सकते हैं। कॉलिंग विधि को पता या देखभाल नहीं होगी, क्योंकि यह अपेक्षा करता है कि यह IEnumerable<T>
है। यह एक हार्डकोडेड सूची प्रकार के मामले में नहीं है - इसे किसी अन्य चीज़ के लिए आदान-प्रदान नहीं किया जा सकता है क्योंकि यह पहले से ही कंक्रीट जितना संभव हो सके।
सामान्य रूप से, एक सामान्य संग्रह इंटरफ़ेस किसी भी विधि के लिए सबसे लचीला इनपुट पैरामीटर/रिटर्न प्रकार होगा - एक इंटरफ़ेस आपको इसे कई तरीकों से कार्यान्वित करने, इसे मजाक करने, आदि के लिए अनुमति देगा ताकि आपके पास बहुत कुछ हो जो गुजरता है या लौटाता है उसे नियंत्रित करने में लचीलापन का। एक इंटरफ़ेस भी (आवश्यक रूप से) अर्थपूर्ण सीमाएं नहीं करता है जो उत्पाद के रूप में असुविधाजनक हो सकता है।
पहली सलाह के लिए, ArrayList
एक भयानक प्रकार है जिसका उपयोग कभी भी .NET 2.0 के बाद नहीं किया जाना चाहिए, क्योंकि जेनेरिक प्रकार हर संभव तरीके से कहीं बेहतर होते हैं।
ध्यान दें कि 2008 में लिखे गए उन दिशानिर्देशों और 3.5 के .NET और 3.0 के सी # के संस्करणों के लिए अद्यतन नहीं किए गए हैं। विशेष रूप से सलाह सी # 4.0 के साथ 2010 में कोविरेन्स और कंट्रावायरेंस की शुरूआत से पहले लिखी गई थी –