IEnumerable एक इंटरफेस है जो एकल मेथड GetEnumerator() को परिभाषित करता है जो IEnumerator इंटरफेस लौटाता है। यह उन सभी नॉन-जेनेरिक कलेक्शन्स के लिए बेस इंटरफेस है जिन्हें एन्यूमरेट किया जा सकता है।
यह केवल-पढ़ने के लिए एक्सेस के लिए काम करता है जो एक कलेक्शन को लागू करता है जिसे foreach स्टेटमेंट के साथ उपयोग किया जा सकता है।
List<T> क्लास इंडेक्स द्वारा एक्सेस किए जा सकने वाले ऑब्जेक्ट्स की सूची का प्रतिनिधित्व करती है। यह System.Collections.Generic नेमस्पेस के अंतर्गत आती है।
List क्लास का उपयोग विभिन्न प्रकारों जैसे इंटीजर्स, स्ट्रिंग्स आदि के कलेक्शन बनाने के लिए किया जा सकता है। List क्लास सूचियों को खोजने, सॉर्ट करने और हेरफेर करने के लिए मेथड्स भी प्रदान करती है।
उदाहरण 1: IEnumerable से List बनाना
static void Main(string[] args)
{
// Enumerable.Range से List बनाएं
IEnumerable<int> enumerable = Enumerable.Range(1, 5);
List<int> list = new List<int>();
foreach (var item in enumerable)
{
list.Add(item);
}
// या अधिक सरलता से:
List<int> list2 = enumerable.ToList();
foreach (var item in list2)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
आउटपुट
1
2
3
4
5
उदाहरण 2: List को IEnumerable में बदलना
static void Main(string[] args)
{
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
// विधि 1: AsEnumerable() - पसंदीदा
IEnumerable<int> enumerable1 = list.AsEnumerable();
// विधि 2: इम्प्लिसिट कन्वर्जन (List, IEnumerable को लागू करता है)
IEnumerable<int> enumerable2 = list;
// विधि 3: Cast<T>() - जब नॉन-जेनेरिक IEnumerable से कन्वर्ट कर रहे हों
IEnumerable enumerable3 = list.Cast<int>();
foreach (var item in enumerable1)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
आउटपुट
1
2
3
4
5
रूपांतरण विधियों की तुलना
| विधि | विवरण | उपयोग का मामला |
|---|---|---|
ToList() | नई List<T> बनाता है | IEnumerable → List (तत्काल निष्पादन) |
AsEnumerable() | IEnumerable<T> के रूप में कास्ट करता है | List → IEnumerable (आलसी, कोई कॉपी नहीं) |
| इम्प्लिसिट कन्वर्जन | स्वचालित (List, IEnumerable को लागू करता है) | List → IEnumerable (सबसे सरल) |
ToArray() | नई सरणी बनाता है | IEnumerable → T[] |
Cast<T>() | नॉन-जेनेरिक से जेनेरिक में कन्वर्ट | IEnumerable → IEnumerable<T> |
महत्वपूर्ण अंतर
- ToList()/ToArray(): तत्काल निष्पादन, नई कलेक्शन बनाता है, मेमोरी आवंटित करता है
- AsEnumerable()/इम्प्लिसिट: आलसी, कोई आवंटन नहीं, केवल रैपर
- List इंडेक्स एक्सेस (
list[0]) की अनुमति देता है, IEnumerable नहीं - IEnumerable स्ट्रीमिंग/पाइपलाइनिंग के लिए बेहतर, List रैंडम एक्सेस के लिए
प्रदर्शन विचार
// खराब: एकाधिक एन्यूमरेशन (क्वेरी कई बार चलती है)
var query = GetData().Where(x => x > 5);
var count = query.Count(); // पहला एन्यूमरेशन
var list = query.ToList(); // दूसरा एन्यूमरेशन!
// अच्छा: एक बार मटेरियलाइज़ करें
var list = GetData().Where(x => x > 5).ToList();
var count = list.Count;
var first = list.FirstOrDefault();
सारांश
IEnumerable → List:.ToList()याnew List<T>(enumerable)
List → IEnumerable:.AsEnumerable()या केवल असाइन करेंIEnumerable<T> e = list;