Question: After almost 4 years of experience, I haven't seen a code where **yield** keyword is used. Can somebody show me a practical usage (along explanation) of this keyword, and if so, aren't there other ways easier to fullfill what it can do?

Answer: 
I have a small db data layer that has a `command` class in which you set the SQL command text, the command type, and return a IEnumerable of 'command parameters'.

Basically the idea is to have typed CLR commands instead of manually filling `SqlCommand` properties and parameters all the time. 

So there is a function that looks like this:

```
IEnumerable<DbParameter> GetParameters()
{
    // here i do something like

    yield return new DbParameter { name = "@Age", value = this.Age };

    yield return new DbParameter { name = "@Name", value = this.Name };
}

```

The class that inherits this `command` class has the properties `Age` and `Name`. 

Then you can new up a `command` object filled its properties and pass it to a `db` interface which actually does the command call. 

All in all makes it really easy to work with SQL commands and keep them typed.
Expanding upon Jan\_V's answer, I just hit a real-world case related to it:

I needed to use the Kernel32 versions of FindFirstFile/FindNextFile. You get a handle from the first call and feed it to all subsequent calls. Wrap this in a enumerator and you get something you can directly use with foreach.