अंगूठे का मेरा नियम इस प्रकार है:
यदि कभी एक मौका है कि मैं नियमित की कोर एल्गोरिथ्म लेने के लिए और एक तरीका है कि मैं उपज रिटर्न का उपयोग कर सकते में यह refactor कर सकते हैं है, मैं IEnumerable < टी के साथ जाना होगा >।
उदाहरण के लिए, मेरे वर्तमान कार्यान्वयन किसी सरणी या एक सूची < टी का उपयोग करता है, तो > आंतरिक रूप से, लेकिन मुझे पता है कि, कम से कम सैद्धांतिक रूप से, मैं करना चाहते हैं और वह आंतरिक रूप से दोबारा काम आलसी मूल्यांकन करने के लिए करने में सक्षम हो सकता है, मैं हूँ एक आईनेमेरेबल < टी > वापस करें।
मुझे पता चला है कि IENumerable < टी > लौटने का लाभ निश्चित रूप से इसका उपयोग करने की परेशानी के लायक है।
हालांकि, अगर एल्गोरिदम, अपनी प्रकृति में, लौटने से पहले परिणामों का पूरी तरह से मूल्यांकन करने की आवश्यकता होगी (दुर्लभ है, लेकिन ऐसा होता है), मैं एक IList < टी > के साथ जाऊंगा। असल में, अगर मैं इसे पहले ही कंप्यूटिंग कर रहा हूं, तो मैं इसे वापस कर दूंगा। IList < टी > IENumerable < टी > लागू करता है, इसलिए सभी LINQ- संबंधित उपयोग के मामले अभी भी काम करते हैं, लेकिन आप आलसी मूल्यांकन खो देते हैं। अगर मुझे पहले से ही मूल्यांकन करने के लिए मजबूर किया गया है, तो यह कोई समस्या नहीं है।
मैं शायद ही कभी IQueryable लौटाता हूं। एकमात्र बार जब मैं इस इंटरफ़ेस का उपयोग करता हूं तो यह है कि अगर मैं सीधे एक क्वेरी करने योग्य डेटा एक्सेस लेयर, या कुछ समान बना रहा हूं। इसका उपयोग करने का उपर, ज्यादातर मामलों में, लाभ के लायक नहीं है।
हालांकि, यदि आपका लक्ष्य हमेशा एक इंटरफ़ेस का उपयोग करना है (मैं इस लक्ष्य से सहमत नहीं हूं), तो मैं IENumerable < टी > पर चिपके रहूंगा।
स्रोत
2009-03-25 15:47:22
यहां लगभग डुप्लिकेट चर्चा: http://stackoverflow.com/questions/396513/should-parameters-returns-of-collections-be-ienumerablet-or-t –