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();
}
}
}
}
}
}
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(); } } } } } }