यह निर्भर करता है।
मैंने यह प्रश्न दो बार पूछा है, और यह "यह निर्भर करता है" उत्तर को चित्रित करने के लिए एक अच्छा उदाहरण है।
निम्नलिखित वर्ग पर विचार करें:
public class MyClass
{
public static IEnumerable<int> Test()
{
return new List<int> { 2, 3, 4 };
}
public static List<int> Test2()
{
return new List<int> { 2, 3, 4 };
}
}
Test
एक IEnumerable
वापस आती है और Test2
IEnumerable
इंटरफेस (उस मामले में List
) की एक ठोस कार्यान्वयन देता है। सबसे अच्छी विधि क्या है? Test
या Test2
?
वास्तव में, दोनों शब्दार्थ अलग हैं:
Test
के रूप में केवल एक IEnumerable
देता है, यह तात्पर्य है कि यह विधि अनुबंध कि डेवलपर एक गणन में लौट आए वस्तु का उपयोग करता है का एक हिस्सा है (foreach
)।
Test2
List
उदाहरण देता है, यह उपयोगकर्ता को सूचकांक द्वारा List
की वस्तुओं तक पहुंचने की अनुमति देता है। यह लौटे ऑब्जेक्ट का एक पूरी तरह से अलग उपयोग है।
private static void Main(string[] args)
{
foreach (var z in MyClass.Test())
{
Console.WriteLine(z);
}
var f = MyClass.Test2()[0];
Console.ReadKey();
}
आप डेवलपर एक गणन में लौट आए वस्तु का उपयोग करने के केवल, तो आप वापसी प्रकार के रूप में इस्तेमाल कर सकते हैं इंटरफेस की आशा करते हैं। यदि आप डेवलपर को इंटरफ़ेस के ठोस कार्यान्वयन के तरीकों/गुणों का उपयोग करने की अपेक्षा करते हैं (उपरोक्त उदाहरण में, अनुक्रमणिका द्वारा ऑब्जेक्ट तक पहुंच), तो आप एक ठोस प्रकार वापस कर सकते हैं।
यह भी याद रखें कि कभी-कभी आपके पास कोई विकल्प नहीं होता है। उदाहरण के लिए, यदि आप एक सार्वजनिक संग्रह का पर्दाफाश करना चाहते हैं जिसका उपयोग सिल्वरलाइट बाध्यकारी के लिए किया जाना चाहिए, तो आपको ObservableCollection<T>
, IEnumerable<T>
पर वापस नहीं जाना चाहिए, क्योंकि बाध्यकारी प्रणाली को वास्तव में ObservableCollection
वर्ग (IEnumerable
) की विधि/गुण/व्यवहार की आवश्यकता नहीं होगी काम करने के लिए बाध्यकारी के लिए पर्याप्त)।
आपको क्या करना चाहिए एक तरीका है जो IEnumerable<T>
देता है और इसका उपयोग हर समय ToList()
के साथ किया जाता है।
मुझे उन तरीकों से नफरत है जो IENumerable लौटाते हैं जब हमें प्राप्त होने वाली सूची होती है। मैं नियमित रूप से लूप (इसके सूचकांक के साथ संदर्भ आइटम) का उपयोग नहीं कर सकता या यहां तक कि सबसे सरल गणना विधि भी नहीं कह सकता (LINQ गणना विधि का उपयोग किए बिना)। जब मैं करता हूं तो एक सूची लौटाती है, मैं जिस प्रकार का उपयोग करता हूं वह ILI है। उपज रिटर्न के साथ संयोजन में उपयोग किए जाने पर मैं केवल/अधिकतर IENumerable लौटाता हूं। एक sidenote: एक सार्वजनिक पुस्तकालय विकसित करते समय, एक IENumerable का उपयोग कर हालांकि अधिक फायदे हो सकता है। –
Nullius