web-dev-qa-db-fra.com

Comment implémenter IEnumerable <T> avec GetEnumerator ()?

J'aimerais que mon type implémente IEnumerable<string>. J'ai essayé de suivre C # en bref, mais quelque chose s'est mal passé:

public class Simulation : IEnumerable<string>
{
    private IEnumerable<string> Events()
    {
        yield return "a";
        yield return "b";
    }

    public IEnumerator<string> GetEnumerator()
    {
        return Events().GetEnumerator();
    }
}

Mais je reçois l'erreur de construction

Erreur 1 "EventSimulator.Simulation" n'implémente pas le membre d'interface "System.Collections.IEnumerable.GetEnumerator ()". 'EventSimulator.Simulation.GetEnumerator ()' ne peut pas implémenter 'System.Collections.IEnumerable.GetEnumerator ()' car il n'a pas le type de retour correspondant de 'System.Collections.IEnumerator'.

18
Colonel Panic

Vous manquez IEnumerator IEnumerable.GetEnumerator():

public class Simulation : IEnumerable<string>
{
    private IEnumerable<string> Events()
    {
        yield return "a";
        yield return "b";
    }

    public IEnumerator<string> GetEnumerator()
    {
        return Events().GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
34
Filip Ekberg

IEnumerable requiert que vous implémentiez à la fois la méthode typée et générique.

Dans la section communauté du msdn docs il explique pourquoi vous avez besoin des deux. (La rétrocompatibilité est la raison invoquée essentiellement).

6
NominSim