Je ne pense pas que je comprends IEnumerable
et ai fait plusieurs google search.C# IEnumerable implementation
Je suis censé faire un conteneur de certains objets, où la classe Container
devrait gérer la mise à jour de la collection que le conteneur représente (ajouter, supprimer).
la collection Container
doit être et l'instance de IEnumerable<element>
.
namespace ....
{
public class Container : Ienumerable<Elements>
{
List<Elements> _elm = new List<Elements>();
List<Elements> _add = new List<Elements>();
List<Elements> _rem = new List<Elements>();
public voic PendAdd(Element elm)
{
_add.Add(elm);
}
public voic Pendrem(Element elm)
{
_rem.remove(elm);
}
...
public IEnumerator<Element> GetEnumerator()
{
return _elm.GetEnumerator();
}
}
}
Mon problème est que IEnumerable<Elements>
est un type abstrait et si je fais _elm
ce type je ne peux pas gérer l'état du Container
même si je fais
IEnumerable<Element> _elm = new List<Element>();
VS se plaint de l'erreur :
'Container' does not implement interface member 'IEnumerable.GetEnumerator()'. 'Container.GetEnumerator()' cannot implement 'IEnumerable.GetEnumerator()' because it does not have the matching return of 'IEnumerator'.
Je sais qu'il y a plusieurs réponses à propos de IEnumerable mais elles ne m'aident pas.
Quelle est la différence entre 'Element' et' Elements'? Vous héritez 'IEnumerable' mais déclarez le type de retour de 'GetEnumerator' comme' IEnumerator 'et vous manquez la méthode non générique' IEnumerator GetEnumerator() '. –
Si vous utilisez le raccourci 'Implement Interface' dans Visual Studio, il créera les méthodes que vous devez implémenter. Selon la réponse de xanatos, cela inclut la méthode GetEnumerator manquante avec son type de retour correct. –
Pourquoi héritez-vous de IEnumerable? Et pourquoi avez-vous trois listes différentes? Vous pouvez juste avoir une classe wrapper autour d'un IEnumerable (comme une liste) et avoir des méthodes qui ajoutent/suppriment de cette liste. –