Testing my comprehension of loops
Aside from the inconsistency in the for loop.  It would make more sense to have the limit as 

i &gt; 0


Your implementations seems sound to me.

However the SingTheLine method could use some work.

First off this:

string pluralityMinusOne = ((drinksLeft + 1 != 1) ? "s" : string.Empty);


doesn't look right.  Shouldn't it be (drinksLeft - 1 != 1)?

Also the new string concatenation introduced in c#6, I believe, is much easier to understand than using string.Format.

sb.AppendLine($"{drinksLeft} bottle{plurality} of beer on the wall, {drinksLeft} bottle{plurality} of beer.");
sb.AppendLine($"Take one down and pass it around, {((drinksLeft - 1 &gt; 1) ? (drinksLeft - 1).ToString() : "no")} bottle{pluralityMinusOne} of beer on the wall.");