O operador yield é muito pouco usado, mas apos conhecê-lo hoje e fiquei impressionado porque nunca vi nada parecido.
Ele é usado para retornar uma instancia de um IEnumerable, vou explica melhor em forma de exemplo.
Vamos supor que você queira apenas retornar os números pares de um vetor, você faria +/- assim:
public IEnumerable PegarPares(int[] numeros)
{
List<int> pares = new List<int>()
foreach (int n in numeros)
{
if (n % 2 == 0
pares.Add(n);
}
return pares;
}
Observe que foi preciso criar um List para armazenar todos os pares encontrados no vetor e então apos o foreach retornar o IEnumerable.
Usando o operador yield, isso poderia ser feito assim:
public IEnumerable PegarPares(int[] numeros)
{
foreach (int n in numeros)
{
if (n % 2 == 0)
yield return n;
}
}
Veja que legal, não é preciso criar nada pra armazenar os números pares.
Mas o operador yield possui algumas restrições:
- Não pode ser usando em blocos inseguros (unsafe blocks)
- Parâmetros para o método e nem usado como ref ou out
Currently rated 3.7 by 6 people
- Currently 3.666667/5 Stars.
- 1
- 2
- 3
- 4
- 5