Lendo alguns artigos me perguntei o que viria a ser o tal do "yield"?
Descobri que se trata de um operador: http://msdn2.microsoft.com/en-us/library/9k7k7cf0.aspx
Pouco usado, ele retorna uma coleção (IEnumerable).
Para clarear vejamos um exemplo onde quiséssemos retornar os numeros pares de um array de inteiros... primeiramente com um algoritmo simples:
public IEnumerable ListarPares(int[] numeros)
{
List<int> resultado = new List<int>();foreach (int numero in numeros)
{
if (numero % 2 == 0)
resultado.Add(numero);
}return resultado;
}
Para tal precisamos criar um List de inteiros para retornar o resultado após a filtragem.
já usando o yield não precisamos declarar o retorno... assim:
public IEnumerable ListarPares(int[] numeros)
{
foreach (int numero in numeros)
{
if (numero % 2 == 0)
yield return numero;
}
}
…sendo assim, não precisamos armazenar em lugar algum... digamos que foi retornando "dinâmicamente" o resultado.
Ele acaba acumulando um "stream" de dados… podemos fazer algo assim também:
public IEnumerable ListarNomes()
{
yield return "Eduardo";
yield return "Spaki";
yield return "Spoky";
}
Mas o yield tem restrições, tais como: não pode ser usando em blocos inseguros (unsafe blocks), parâmetros para o método (param) e nem usado com ref ou out.
Fonte: http://www.magodigital.info/post/2008/02/Operador-Yield-do-C.aspx
0 comentários:
Postar um comentário