Compartilhar via


Iterators (C# Programming Guide)

Um iterador é um método, obter acessador ou operador executa uma iteração personalizada através de uma classe de matriz ou coleção usando o gerar palavra-chave. O yield retornar instrução faz com que um elemento da seqüência de origem a ser retornado imediatamente para o chamador antes do próximo elemento da seqüência de origem é acessado. Embora escrever um iterador como um método, o compilador converte em uma classe aninhada isto é, na verdade, uma máquina de estado. Essa classe mantém controle sobre a posição do iterador como longo o foreach o loop no código do cliente continua.

ObservaçãoObservação

Para ver o que o compilador faz nos bastidores, use a ferramenta ILDASM. exe para exibir o código de linguagem intermediária (IL) é gerado para um método iterador.

Um iterador é chamado a partir do código de cliente usando um foreach instrução. Por exemplo, você pode criar um iterador para uma classe que retorna os elementos em ordem inversa, ou que executa uma operação em cada elemento antes de retorna o iterador. Quando você cria um iterador para seu classe ou struct, não é necessário implementar todo o IEnumerator interface. Quando o compilador detecta o iterador, ele irá gerar automaticamente o Current, MoveNext e Dispose métodos para a IEnumerator ou IEnumerator<T> interface.

Visão geral de iteradores

  • Um iterador é uma seção do código que retorna uma seqüência ordenada de valores do mesmo tipo.

  • Um iterador pode ser usado como o corpo de um método, um operador, ou um get acessador.

  • O código do iterador usa a yield return a instrução para retornar a cada elemento em Ativar. yield breaktermina a iteração.

  • Vários iteradores podem ser implementados em uma classe. Cada iterador deve ter um nome exclusivo, assim como qualquer membro da classe e pode ser chamado pelo código do cliente em um foreach a instrução da seguinte maneira: foreach(int x in SampleClass.Iterator2){}.

  • O tipo de retorno de um iterador deve ser IEnumerable, IEnumerator, IEnumerable<T>, ou IEnumerator<T>.

  • Iteradores são a base para o comportamento de execução retardada no LINQ consultas.

O gerar palavra-chave é usada para especificar o valor ou valores, que são retornados. Quando o yield return instrução for atingida, o local atual é armazenado. Execução for reiniciada na próxima vez que o iterador é chamado deste local.

Iteradores são especialmente úteis com as classes de coleção, fornecendo uma maneira fácil de iterar estruturas de dados complexas como árvores binárias.

Seções relacionadas

Para obter mais informações:

Exemplo

Neste exemplo, o DaysOfTheWeek é uma classe de coleção simples que armazena os dias da semana como seqüências de caracteres. Após cada iteração de um foreach loop, a próxima seqüência de caracteres na coleção será retornada.

public class DaysOfTheWeek : System.Collections.IEnumerable
{
    string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

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

class TestDaysOfTheWeek
{
    static void Main()
    {
        // Create an instance of the collection class
        DaysOfTheWeek week = new DaysOfTheWeek();

        // Iterate with foreach
        foreach (string day in week)
        {
            System.Console.Write(day + " ");
        }
    }
}
// Output: Sun Mon Tue Wed Thr Fri Sat

Especificação da linguagem C#

Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Generics (C# Programming Guide)

Conceitos

C# Programming Guide

Outros recursos

Tudo sobre iteradores