Compartir a través de


yield (Referencia de C#)

Actualización: noviembre 2007

Se utiliza en un bloque iterator para proporcionar un valor al objeto enumerador o señalar el fin de la iteración. Presenta una de las siguientes formas:

yield return <expression>;
yield break;

Comentarios

La expresión se evalúa y se devuelve como valor al objeto enumerador; expression se debe poder convertir implícitamente al tipo yield del iterador.

La instrucción yield sólo puede aparecer dentro de un bloque iterator que podría utilizarse como cuerpo de un método, operador o descriptor de acceso. El cuerpo de dicho método, operador o descriptor de acceso se controla mediante las siguientes restricciones:

  • No se permiten bloques unsafe.

  • Los parámetros del método, operador o descriptor de acceso no pueden ser ref ni out.

Una instrucción yield no puede aparecer en un método anónimo. Para obtener más información, vea Métodos anónimos (Guía de programación de C#).

Cuando se utiliza con expression, una instrucción yield return no puede aparecer en un bloque catch ni en un bloque try que tengan una o más cláusulas catch. Para obtener más información, vea Instrucciones para el control de excepciones (Referencia de C#).

Ejemplo

En el siguiente ejemplo, la instrucción yield se utiliza dentro de un bloque de iteradores, que es el método Power(int number, int power). Cuando se invoca al método Power, este devuelve un objeto enumerable que contiene las potencias de un número. Observe que el tipo de valor devuelto del método Power es IEnumerable, un tipo de interfaz de iteradores.

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 
*/

Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 19.3 Iteradores

  • 22 Iteradores

Vea también

Conceptos

Guía de programación de C#

Referencia

foreach, in (Referencia de C#)

Utilizar iteradores (Guía de programación de C#)

Otros recursos

Referencia de C#