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: 
A practical example may be found here: 

<http://www.ytechie.com/2009/02/using-c-yield-for-readability-and-performance.html>

There are a number of advantages of using yield over standard code:

* If the iterator is used to build a list then you can yield the return and the caller can **decide** whether he wants that result in a list, or not.
* The caller may also decide to cancel the iteration for a reason that is outside of the scope of what you are doing in the iteration.
* Code is a bit shorter.

However, as Jan\_V said (just beat me to it by a few seconds :-) you can live without it because internally the compiler will produce code almost identical in both cases.
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.