Trying to reflect the Main method crashes Reflector 10.3 without comment
internal static class NinetyNineBottlesOfBeer
{
private static void Main()
{
foreach (var line in GetSongText())
System.Console.WriteLine(line);
System.Console.ReadLine();
System.Collections.Generic.IEnumerable<string> GetSongText()
{
var numberOfBottles = 99;
do
{
var oldNumberText = GetNumberText(numberOfBottles);
if (numberOfBottles > 1)
{
yield return $"{oldNumberText} bottles of beer on the wall,";
yield return $"{oldNumberText} bottles of beer.";
yield return "Take one down, pass it around,";
numberOfBottles--;
var newNumberText = GetNumberText(numberOfBottles);
if (numberOfBottles > 1)
yield return $"{newNumberText} bottles of beer on the wall.";
else
yield return $"{newNumberText} last bottle of beer on the wall.";
}
else
{
yield return $"{oldNumberText} last bottle of beer on the wall,";
yield return $"{oldNumberText} last bottle of beer.";
yield return "Take it down, pass it around,";
yield return "No more bottles of beer on the wall.";
numberOfBottles--;
}
yield return string.Empty;
} while (numberOfBottles > 0);
string GetNumberText(int number)
{
switch (number / 10)
{
case 9:
return GetComboNumberText("Ninety", GetLastDigitText(number - 90));
case 8:
return GetComboNumberText("Eighty", GetLastDigitText(number - 80));
case 7:
return GetComboNumberText("Seventy", GetLastDigitText(number - 70));
case 6:
return GetComboNumberText("Sixty", GetLastDigitText(number - 60));
case 5:
return GetComboNumberText("Fifty", GetLastDigitText(number - 50));
case 4:
return GetComboNumberText("Fourty", GetLastDigitText(number - 40));
case 3:
return GetComboNumberText("Thirty", GetLastDigitText(number - 30));
case 2:
return GetComboNumberText("Twenty", GetLastDigitText(number - 20));
case 1:
return GetTeenNumberText(number);
case 0:
return GetLastDigitText(number);
default:
throw new System.NotSupportedException();
}
string GetComboNumberText(string tens, string ones) => ones != null ? $"{tens}-{ones}" : tens;
string GetTeenNumberText(int teenNumber)
{
switch (teenNumber)
{
case 19:
return "Nineteen";
case 18:
return "Eighteen";
case 17:
return "Seventeen";
case 16:
return "Sixteen";
case 15:
return "Fifteen";
case 14:
return "Fourteen";
case 13:
return "Thirteen";
case 12:
return "Twelve";
case 11:
return "Eleven";
case 10:
return "Ten";
default:
throw new System.NotSupportedException();
}
}
string GetLastDigitText(int lastDigit)
{
switch (lastDigit)
{
case 9:
return "Nine";
case 8:
return "Eight";
case 7:
return "Seven";
case 6:
return "Six";
case 5:
return "Five";
case 4:
return "Four";
case 3:
return "Three";
case 2:
return "Two";
case 1:
return "One";
case 0:
return null;
default:
throw new System.NotSupportedException();
}
}
}
}
}
}