Entendo yield com C#

A expressão yield é utilizado como um iterador de bloco fornecendo um valor para o objeto enumerador ou para sinalizar o final da iteração, também para realização de uma iteração sobre uma coleção personalizada. Para mais informações sobre o conteúdo acesse o link http://msdn.microsoft.com/en-us/library/vstudio/9k7k7cf0.aspx.

Nesse tutorial iremos elaborar uma implementação básica, onde o retorno será composta por uma coleção de valores do tipo int. Para implementação irei utilizar o VS2012, criando assim um novo projeto do tipo ConsoleApplication, somente para fins didáticos.

Veja a implementação abaixo:

using System;
using System.Collections.Generic;

namespace SampleReturnYield
{
    class Program
    {
        static void Main(string[] args)
        {
            var numeros = ObterNumeros();

            foreach (var n in numeros)
            {
                Console.WriteLine("Sequência: {0}", n);
            }
        }

        static IEnumerable<int> ObterNumeros()
        {
            for (int i = 0; i < 10; i++)
            {
                yield return i;
            }
        }
    }    
}

Como podemos observar a implementação é bem simples, foi criado um método chamado de ObterNumeros() e tem como retorno uma coleção de IEnumerable<int>. Como já citamos acima, o retorno para yield é utilizado para um bloco do tipo IEnumerable<T>(considere o T como qualquer tipo de objeto), você também tem a liberdade de fazer iterações em cima de objetos que venha a ser criado em seus projetos.
Apesar de não mais precisarmos de uma classe auxiliar para criar o enumerador, quando utilizamos a keyword yield, automaticamente o compilador gera a classe que implementa a Interface IEnumerator, implementando todos os métodos necessários para a iteração entre os elementos da coleção. A keyword yield que determina a criação do enumerador, ainda permite uma outra forma de passar os itens para o mesmo, mantendo o mesmo resultado final.

Bom pessoal espero ter ajudado, obrigado…