// and thank you for all the fish
using System;

class MainClass
{
    // weil in C# "const" nicht auf initialisierte arrays angewendet werden kann, muss "readonly" herhalten 
    static readonly string[] aszAnimals = {"chicks","cows","pigs","dogs","cats", "sheep", "horses", "fish"};
    static readonly string[] aszAnimalSounds = {"cluck" ,"moo", "oink","woof","meow", "baah",  "neigh", "blub"};

    const int MAX_ANIMALS = 8;

    public static void Main(string[] args)
      {
      for (int nAnimal = 0; nAnimal < MAX_ANIMALS; nAnimal++)
         {
         // Erste Zeile
         Console.WriteLine ("Old Mac Donald had a farm - Ee i ee i o");
         // Zweite Zeile
         Console.WriteLine ("And on his farm he had some {0} - Ee i ee i o", aszAnimals[nAnimal]);
        
         // hier ist der Trick. Vom aktuellen Tier bis zum Hendl rueckwäerts zaehlen.       
         for (int nSound = nAnimal; nSound >= 0; nSound--)
             {
             // Dritte Zeile
             Console.WriteLine ("With a {0}-{0} here", aszAnimalSounds[nSound]);
              // Vierte Zeile
             Console.WriteLine ("And a {0}-{0} there", aszAnimalSounds[nSound]);
             // Fnfte Zeile
             Console.WriteLine ("Here a {0} there a {0}", aszAnimalSounds[nSound]);
             // Sexte Zeile
             Console.WriteLine ("Everywhere a {0}-{0}", aszAnimalSounds[nSound]);
             }
         // Letzte Zeile
         Console.WriteLine ("Old Mac Donald had a farm - Ee i ee i o\n");
         }  
    }
}

syntax highlighted by Code2HTML, v. 0.9.1