Compartilhar via


Iterators (guia de programação C#)

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 rendimento palavra-chave.The yield demonstrativo Return faz com que um elemento a sequência de fonte a ser retornado imediatamente para o chamador antes do próximo elemento da sequência de fonte é acessado. Embora escrever um iterador sistema autônomo um método, o compilador converte em uma classe aninhada ou seja, na verdade, uma computador de estado.Essa classe mantém controle sobre a posição do iterador sistema autônomo longo o foreach loop no código do cliente continua.

Observação:

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

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

Visão geral de iteradores

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

  • Um iterador pode ser usado sistema autônomo o corpo de um método, um operador ou um get acessador.

  • O código do iterador usa o yield return demonstrativo para retornar cada elemento por sua vez. yield break termina a iteração.

  • É possível implementar vários iteradores em uma classe.Cada iterador deve ter um nome exclusivo da mesma forma que qualquer membro da classe e pode ser chamado pelo código do cliente em um foreach demonstrativo 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>.

  • Os iteradores são a base para o comportamento de execução retardada LINQ consultas.

The rendimento palavra-chave é usada para especificar o valor ou valores, que são retornados.Quando o yield return demonstrativo for atingida, o local corrente é armazenado. Execução for reiniciada na próxima vez em que o iterador é chamado deste local.

sistema autônomo iteradores são especialmente úteis com sistema autônomo classes de coleção, fornecendo uma maneira fácil para iterar estruturas de dados complexos, sistema autônomo árvores binárias.

Seções relacionadas

Para obter mais informações:

Exemplo

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

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 as seções a seguir no Especificação da linguagem C#:

  • 10,14 Iteradores

Consulte também

Conceitos

Guia de Programação C#

Referência

Generics (Guia de programação C#)