Comment définir un type d'interface d'itérateur?

J'ai écrit une classe qui implémente IEnumerable<T>. J'ai une méthode qui retourne MyClass. Si j'essaie de yield return de l'intérieur de cette méthode, le compilateur me dit "... ne peut pas être un itérateur bloc parce que ... ce n'est pas un itérateur interface de type".

Alors, comment puis-je définir ma propre interface iterator type? A-t-elle à être "abstrait" (ne peut pas toutes les méthodes définies)?

Ce que je veux faire est d'écrire un tas de chaînage de méthodes, de sorte que chaque méthode doit retourner une instance de MyClass. Mais j'ai besoin de MyClass à être une sorte de énumérable. Plutôt que d'utiliser certains sous-jacent type de données, j'espérais que je pourrais juste yield return partout.


@Oded:

class SharpQuery : IEnumerable<HtmlNode>
{
    public SharpQuery Find(string selector)
    {
        foreach (var n in this)
        {
            //filter the results
            yield return node;
        }
    }
}
Vous pouvez poster pertinentes bits de votre code?

OriginalL'auteur mpen | 2010-09-26