Return Nth Weekday of Month
int i = 0;
    while(i &lt; nthWeekday &amp;&amp; currentDay.Month == date.Month)
    {
        if (currentDay.DayOfWeek != DayOfWeek.Saturday &amp;&amp; currentDay.DayOfWeek != DayOfWeek.Sunday)
        {
            i++;
            if(i == nthWeekday)
                return currentDay;
        }
        currentDay = currentDay.AddDays(1);
    }



Your while loop is a little messy let's clean that up first, and you should also have an early continue statement in there.

Let me show you what I mean:

int i = 1;
while(i &lt;= nthWeekday &amp;&amp; currentDay.Month == date.Month)
{
    bool isWeekendDay = currentDay.DayOfWeek == DayOfWeek.Saturday || currentDay.DayOfWeek == DayOfWeek.Sunday;

    if (isWeekendDay)
    {
        currentDay = currentDay.AddDays(1);
        continue;
    }
    if (i == nthWeekday) 
    {
        return currentDay;
    }
    currentDay = currentDay.AddDays(1);
    i++;
}


This is a lot cleaner, and shows exactly what our intent is.  It is much easier to read.

You shouldn't nest if statements inside of other if statements if you don't have to, it can get very confusing.