¿Para qué sirve la palabra clave yield en C#? ¿Cómo usar yield return y yield break?
¡Hola a todos! Acabo de empezar a aprender C# y me encontré con la palabra clave `yield`. Honestamente, no entiendo del todo para qué sirve y cómo usarla correctamente.
He visto ejemplos donde `yield return` se usa dentro de métodos que devuelven `IEnumerable` o `IEnumerable`. Pero tengo dos preguntas:
1. ¿Cuál es la diferencia entre devolver una colección normal (por ejemplo, `List` con `return`) y usar `yield return`?
2. ¿Cuándo es realmente necesario en proyectos reales, y no solo en ejemplos de aprendizaje?
Aquí hay un ejemplo que encontré en MSDN, pero me parece extraño:
```csharp
static IEnumerable GetNumbers()
{
for (int i = 0; i < 10; i++)
{
yield return i;
}
}
```
¿Por qué no se puede simplemente hacer así?
```csharp
static List GetNumbers()
{
List list = new List();
for (int i = 0; i < 10; i++)
{
list.Add(i);
}
return list;
}
```
Después de todo, el resultado parece ser el mismo: obtenemos