Je sais comment implémenter le IEnumerable non générique, comme ceci:
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();
}
}
}
Cependant, je remarque également que IEnumerable a une version générique IEnumerable<T>
, mais je ne peux pas comprendre comment l'implémenter.
Si j'ajoute using System.Collections.Generic;
à mes directives d'utilisation, puis que je change:
class MyObjects : IEnumerable
à:
class MyObjects : IEnumerable<MyObject>
Et puis faites un clic droit sur IEnumerable<MyObject>
et sélectionnez Implement Interface => Implement Interface
, Visual Studio ajoute utilement le bloc de code suivant:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
Le retour de l'objet IEnumerable non générique à partir de la GetEnumerator();
méthode ne fonctionne pas cette fois, alors que dois-je mettre ici? La CLI ignore maintenant l'implémentation non générique et se dirige directement vers la version générique lorsqu'elle essaie d'énumérer via mon tableau pendant la boucle foreach.
this.GetEnumerator()
et le simple retourGetEnumerator()
?