संभव डुप्लिकेट:
Collection<T> versus List<T> what should you use on your interfaces?एक IEnumerable <T> या ICollection <T> रूप में एक आंतरिक सूची <T> लौटने के लिए ठीक?
इस विधि-लौटे चर myVar
पर विचार करें एक List<T>
है, लेकिन विधि MyMethod()
की वापसी प्रकार एक IEnumerable<T>
है:
public IEnumerable<T> MyMethod(string stuff)
{
var myVar = new List<T>();
//do stuff
return myVar;
}
अनिवार्य रूप से, मैं क्या जानना चाहता हूं अगर रिटर्न है एनजी myVar
एक अलग प्रकार के रूप में ठीक है।
विशेष रूप से, मेरी स्थिति के संबंध में, 'डू स्टफ' DataRow
के माध्यम से जाता है और वस्तुओं की सूची में DataRow
में आइटम असाइन करता है। मेरे पास ICollection
और IList
अन्य स्थानों पर रिटर्न प्रकारों के साथ समान स्थितियां भी हैं।
कारण मैं वापस जाने के लिए या तो IEnumerable
या ICollection
है ताकि मैं जरूरत से ज्यादा वापस नहीं कर रहा हूँ चाहता हूँ। लेकिन साथ ही, यह कॉलर को लौटाए गए मान को List
पर बदलने की अनुमति देता है यदि उसे ऐसा करने की आवश्यकता है।
हालांकि, यह अजीब लगता है कि मेरा रिटर्न स्टेटमेंट List
लौटा रहा है, विधि के रिटर्न प्रकार के बजाय। क्या यह सामान्य अभ्यास है? क्या ऐसा करने में कुछ गड़बड़ है?
स्पष्टीकरण (शिकार टिप्पणियों के जवाब में):
बस स्पष्ट करने के लिए, क्या मैं उत्सुक हूँ है के बारे में है, तो यह ठीक है कि शरीर में मेरी वापसी कथन एक List<T>
लौटा रहा है है, लेकिन विधि हैडर IEnumerable
, या संभवतः ICollection
, Collection
, आदि की वापसी प्रकार ... कुछ अलग पिण्डों से से लौटने के बयान है।
कॉलर कभी भी आईनेमेरेबल से सूची में परिवर्तित नहीं होना चाहिए। एक इंटरफ़ेस लौटने का कारण यह है कि इससे कोई फर्क नहीं पड़ता कि अंतर्निहित सूची, ऑबरवेबल संग्रह, सरल सरणी या यहां तक कि उपज रिटर्न के माध्यम से एक सूची है। – aqwert
दो सुझाए गए डुप्लस इस प्रश्न के मुकाबले एक-दूसरे के डुप्लिकेट के करीब हैं, मुझे लगता है, हालांकि वे सभी निकट से संबंधित हैं। –
@ क्रिसशहरबारुक मैं मानता हूं कि यह प्रश्न एक डुप्लिकेट नहीं है और मैंने आशा व्यक्त की है कि मैं यह मानता हूं कि मुझे क्या लगता है कि यह अद्वितीय है। मैंने सवाल फिर से खोलने के लिए भी वोट दिया है। – DavidRR