Compartilhar via


Usando iteradores (guia de programação translation from VPE for Csharp)

A maneira mais comum para criar um iterador é implementar o GetEnumerator método na IEnumerable interface, por exemplo:

public System.Collections.IEnumerator GetEnumerator()
{
    for (int i = 0; i < 10; i++)
    {
        yield return i;
    }
}

A presença do GetEnumerator método faz o tipo de um tipo enumerável e permite usando o foreach demonstrativo.Se o método acima for parte de uma definição de classe ListClass, e em seguida, seria possível usar foreach na classe como este:

static void Main()
{
    ListClass listClass1 = new ListClass();

    foreach (int i in listClass1)
    {
        System.Console.WriteLine(i);
    }
}

The foreach demonstrativo chama ListClass.GetEnumerator() e usa o enumerador retornado para iterar por meio de valores. Para obter um exemplo de como criar um iterador genérico que retorna um IEnumerator<T> interface, consulte Como: Criar um bloco iterador para uma lista genérica (guia de programação translation from VPE for Csharp).

Também é possível usar os iteradores nomeados para oferecer suporte a diferentes maneiras de iteração através da mesma coleção de dados.Por exemplo, você poderia fornecer um iterador que retorna elementos em ordem crescente e uma que retorna elementos em ordem decrescente.Um iterador também pode ter parâmetros para ativar o controle todos os clientes ou parte do comportamento iteração.O iterador a seguir implementa a IEnumerable interface usando o iterador nomeado SampleIterator:

// Implementing the enumerable pattern
public System.Collections.IEnumerable SampleIterator(int start, int end)
{
    for (int i = start; i <= end; i++)
    {
        yield return i;
    }
}

O iterador nomeado é chamado como este:

ListClass test = new ListClass();
foreach (int n in test.SampleIterator(1, 10))
{
    System.Console.WriteLine(n);
}

Você pode usar mais de um rendimento demonstrativo no iterador mesmo sistema autônomo no exemplo a seguir:

public System.Collections.IEnumerator GetEnumerator()
{
    yield return "With an iterator, ";
    yield return "more than one ";
    yield return "value can be returned";
    yield return ".";
}

Você pode imprimir os resultados usando a seguinte foreach demonstrativo:

foreach (string element in new TestClass())
{
    System.Console.Write(element);
}

Este exemplo exibe o texto a seguir:

With an iterator, more than one value can be returned.

On each successive iteration of the foreach loop (or the direct call to IEnumerator.MoveNext), the next iterator code body resumes after the previous yield statement and continues to the next until the end of the iterator body is reached, or a yield break statement is encountered.

Iteradores não oferecem suporte a IEnumeratorReset() método. Para re-iterar desde o início, você deverá obter um iterador novo.

Consulte também

Tarefas

Como: Criar um bloco iterador para uma lista de números inteiros (guia de programação translation from VPE for Csharp)

Como: Criar um bloco iterador para uma lista genérica (guia de programação translation from VPE for Csharp)

Conceitos

Guia de Programação C#

Referência

rendimento (translation from VPE for Csharp Reference)

Uso de foreach com arrays (translation from VPE for Csharp Programming guia)

foreach (translation from VPE for Csharp Reference)