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:
1: public IEnumerable PegarPares(int[] numeros)
2: {
3: List<int> pares = new List<int>();
4: foreach (int n in numeros)
5: {
6: if (n % 2 == 0)
7: pares.Add(n);
8: }
9: return pares;
10: }
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:
1: public IEnumerable PegarPares(int[] numeros)
2: {
3: foreach (int n in numeros)
4: {
5: if (n % 2 == 0)
6: yield return n;
7: }
8: }
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 2.0 by 1 people
- Currently 2/5 Stars.
- 1
- 2
- 3
- 4
- 5