मुझे पता है कि इस तरह गैर जेनेरिक IEnumerable कैसे लागू किया जाए:
using System;
using System.Collections;
namespace ConsoleApplication33
{
class Program
{
static void Main(string[] args)
{
MyObjects myObjects = new MyObjects();
myObjects[0] = new MyObject() { Foo = "Hello", Bar = 1 };
myObjects[1] = new MyObject() { Foo = "World", Bar = 2 };
foreach (MyObject x in myObjects)
{
Console.WriteLine(x.Foo);
Console.WriteLine(x.Bar);
}
Console.ReadLine();
}
}
class MyObject
{
public string Foo { get; set; }
public int Bar { get; set; }
}
class MyObjects : IEnumerable
{
ArrayList mylist = new ArrayList();
public MyObject this[int index]
{
get { return (MyObject)mylist[index]; }
set { mylist.Insert(index, value); }
}
IEnumerator IEnumerable.GetEnumerator()
{
return mylist.GetEnumerator();
}
}
}
हालाँकि मैं यह भी देखता हूँ कि IEnumerable का एक सामान्य संस्करण है IEnumerable<T>
, लेकिन मैं यह नहीं जान सकता कि इसे कैसे लागू किया जाए।
यदि मैं using System.Collections.Generic;
अपने निर्देशों का उपयोग करते हुए जोड़ता हूं, और फिर बदल जाता हूं:
class MyObjects : IEnumerable
सेवा:
class MyObjects : IEnumerable<MyObject>
और फिर राइट क्लिक करें IEnumerable<MyObject>
और चुनें Implement Interface => Implement Interface
, विजुअल स्टूडियो सहायक कोड के निम्नलिखित ब्लॉक को जोड़ता है:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
गैर सामान्य IEnumerable ऑब्जेक्ट को GetEnumerator();
विधि से वापस करना इस समय काम नहीं करता है, तो मैं यहां क्या डालूं? सीएलआई अब गैर जेनेरिक कार्यान्वयन की उपेक्षा करता है और जेनेरिक संस्करण के लिए सीधे सिर जाता है जब यह फॉरेस्ट लूप के दौरान मेरे सरणी के माध्यम से गणना करने की कोशिश करता है।
this.GetEnumerator()
केवल और केवल लौटने के बीच का अंतर हैGetEnumerator()
?