rendimento (referência de C#)

O yield palavra-chave sinaliza ao compilador que o método em que aparece é um bloco iterador. O compilador gera uma classe para implementar o comportamento é expresso no bloco iterador. No bloco iterador, o yield palavra-chave é usada junto com o return palavra-chave para fornecer um valor para o objeto enumerador. Esse é o valor retornado, por exemplo, em cada loop de um foreach instrução. O yield palavra-chave também é usado com break para sinalizar o final da iteração. Para obter mais informações sobre os iteradores, consulte Iterators (C# Programming Guide). O exemplo a seguir mostra as duas formas da instrução yield.

yield return <expression>;
yield break;

Comentários

Em um rendimento retornar instrução, expression é avaliado e retornado como um valor para o objeto enumerador; expressiondeve ser implicitamente conversível para o tipo de yield do iterador.

Em um yield break instrução, o controle incondicionalmente é retornado ao chamador do iterador, que é o IEnumerator.MoveNext método (ou seu genérica System.Collections.Generic.IEnumerable<T> contraparte) ou o Dispose o método do objeto enumerador.

O yield instrução só pode aparecer dentro de um iterator block, que pode ser implementado como o corpo de método, operador ou o acessador. O corpo de tais métodos, operadores ou acessadores é controlado pelas seguintes restrições:

  • Blocos não seguros não são permitidos.

  • Parâmetros para o método, operador ou assessor não podem ser ref ou check-out.

  • Uma instrução yield return não pode ser localizada em qualquer lugar dentro de um bloco try-catch. Pode ser localizado em um bloco try se o bloco try é seguido por um bloco finally.

  • Uma instrução yield break pode estar localizada em um bloco catch ou de um bloco try, mas não um bloco finally.

A yield a instrução não pode aparecer em um método anônimo. Para obter mais informações, consulte Anonymous Methods (C# Programming Guide).

Quando usado com expression, um yield return a instrução não pode aparecer em um catch bloco ou em um try bloco que possui um ou mais catch cláusulas. Para obter mais informações, consulte Exception Handling Statements (C# Reference).

Exemplo

No exemplo a seguir, o yield declaração é usada dentro de um bloco iterador, que é o método Power(int number, int power). Quando o Power método é invocado, ele retorna um objeto enumerável, que contém os poderes de um número. Observe que o tipo de retorno da Power método é System.Collections.IEnumerable, um tipo de interface de iterador.

public class List
{
    //using System.Collections;
    public static IEnumerable Power(int number, int exponent)
    {
        int counter = 0;
        int result = 1;
        while (counter++ < exponent)
        {
            result = result * number;
            yield return result;
        }
    }

    static void Main()
    {
        // Display powers of 2 up to the exponent 8:
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }
}
/*
Output:
2 4 8 16 32 64 128 256 
*/

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

foreach, (C# Reference)

Usando iteradores (guia de programação de C#)

Conceitos

C# Programming Guide

Outros recursos

C# Reference