Avatar ·

Para que serve a palavra-chave yield em C#? Como usar yield return e yield break?

Olá a todos! Comecei a estudar C# recentemente e me deparei com a palavra-chave `yield`. Sinceramente, não entendo muito bem para que ela serve e como usá-la corretamente.\n\nVi exemplos onde `yield return` é usado dentro de métodos que retornam `IEnumerable` ou `IEnumerable`. Mas tenho duas perguntas:\n\n1. Qual a diferença entre retornar uma coleção normal (por exemplo, `List` com `return`) e usar `yield return`?\n2. Quando isso é realmente necessário em projetos reais, e não apenas em exemplos didáticos?\n\nAqui está um exemplo que encontrei no MSDN, mas que me parece estranho:\n\n```csharp\nstatic IEnumerable GetNumbers()\n{\n for (int i = 0; i < 10; i++)\n {\n yield return i;\n }\n}\n```\n\nPor que não posso simplesmente fazer assim?\n\n```csharp\nstatic List GetNumbers()\n{\n List numbers = new List();\n for (int i = 0; i < 10; i++)\n {\n numbers.Add(i);\n }\n return numbers;\n}\n```\n\nQual é a vantagem do `yield`? E o que `yield break` faz? Agradeço desde já pela ajuda!