Testing my comprehension of loops I want to make sure I'm understanding loops. Below are the two files I used to test what I've learned. Is there anything that I'm not using that would help simplify my code?

//Program.cs
using System;

namespace _99_Bottles
{
    class Program
    {
        static void Main(string[] args)
        {
            Bar b = new Bar();
            Console.WriteLine(b.SingASong(SingingMethod.DoWhile));

            Console.WriteLine(b.SingASong(SingingMethod.ForLoop));

            Console.WriteLine(b.SingASong(SingingMethod.WhileLoop));

            Console.WriteLine(b.SingASong(SingingMethod.ForEach));
        }
    }
}


//Bar.cs
using System.Text;

namespace _99_Bottles
{
    public enum SingingMethod
    {
        ForLoop,
        WhileLoop,
        DoWhile,
        ForEach
    }
    class Bar
    {
        private StringBuilder _chorus = new StringBuilder();
        private int _bottleCount;

        public string SingASong(SingingMethod singingMethod, int numberOfBottles = 99)
        {
            _bottleCount = numberOfBottles;
            switch (singingMethod)
            {
                case SingingMethod.DoWhile:
                    return DoWhileLoop();
                case SingingMethod.ForLoop:
                    return ForLoop();
                case SingingMethod.WhileLoop:
                    return WhileLoop();
                case SingingMethod.ForEach:
                    return ForEach();
                default:
                    return "Nothing valid";
            }
        }

        private string ForLoop()
        {
            _chorus.AppendLine("ForLoop");
            for (int i = _bottleCount; i &gt;= 1; i--)
            {
                _chorus.AppendLine(SingTheLine(i));
            }
            return _chorus.ToString();
        }

        private string WhileLoop()
        {
            _chorus.AppendLine("WhileLoop");
            int i = _bottleCount;
            while (i &gt; 0)
            {
                _chorus.AppendLine(SingTheLine(i));
                i--;
            }
            return _chorus.ToString();
        }

        private string DoWhileLoop()
        {
            int i = _bottleCount;
            do
            {
                _chorus.AppendLine(SingTheLine(i));
                i--;
            } while (i &gt; 0) ;

            return _chorus.ToString();
        }

        private string SingTheLine(int drinksLeft)
        {
            StringBuilder sb = new StringBuilder();
            string plurality = ((drinksLeft != 1) ? "s" : string.Empty);
            string pluralityMinusOne = ((drinksLeft + 1 != 1) ? "s" : string.Empty);
            sb.AppendLine(string.Format(string.Format("{0} bottle{1} of beer on the wall, {0} bottle{1} of beer.", drinksLeft, plurality)));
            sb.AppendLine(string.Format("Take one down and pass it around, {0} bottle{1} of beer on the wall.",((drinksLeft-1 &gt; 1) ? (drinksLeft-1).ToString() : "no"), pluralityMinusOne));

            return sb.ToString();
        }

        private string ForEach()
        {
            const string ymca = "YMCA";

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("It's fun to stay at the:");
            foreach (char letter in ymca)
            {
                sb.AppendLine(letter.ToString());
            }

            return sb.ToString();
        }
    }
}
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.");