Monday 20 February 2017


The yield keyword before a return statement greatly simplifies creating a Numerator to enable the use of the for each loop. For a collection to be traversed by a foreeach loop that collection must implement the IEnumerable Interface which has one function that returns an instance of INumerator, now from my previous post we saw that it's a bit involved however the Yield keyword greatly simplifies that.

Let's start with a person class.

class Person
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Birthdate { get; set; }
    public int Age
            var today = DateTime.Today;
            var age = today.Year - Birthdate.Year;
            return Birthdate > today.AddYears(-age) ? --age : age;

    public IEnumerable<DayOfWeek> BirthWeekDays() {
        for (int i = 0; i < this.Age+2; i++)
            yield return Birthdate.AddYears(i).DayOfWeek;

    public override string ToString() { return $"{Age} {FirstName} {LastName}"; }


now this "Person" class differs slightly in the sense that it has the BirthWeekDays function, this function returns an IEnumerable of the DayOfWeek type; in essence it just returns every day of the week since you where born, so if you where born on a Tuesday, that's where it would start.

so let's see how it goes.

class Program
    static void Main(string[] args)
        var p = new Person {
            FirstName = "Pawel",
            LastName = "Ciucias",
            Birthdate = new DateTime(1984, 1, 31)

        foreach(var wd in p.BirthWeekDays())



now our application just zips through and lists all of the birth weekdays our person had since birth until their next birthday.