public static void Main()
        {
            Spell.RegisterSpell("Invisibility", typeof(Invisibility));
            Spell.RegisterSpell("Heal", typeof(Heal));
            Spell.RegisterSpell("Teleport", typeof(Teleport));

            SpellBook myspellbook        = new SpellBook();             //all available spells in a spellbook
            SpellBook saveAllCastedSpell = new SpellBook();             //spells that were cast and to save

            string choice;
            string Continue;
            Spell  s;
            string ObjectString;
            object objects = new object();

            //Adding available spells into spellbook
            myspellbook.AddSpells(new Teleport("1. Mitch's mighty mover <Teleport>"));
            myspellbook.AddSpells(new Heal("2. Paul's potent poultice <Heal>"));
            myspellbook.AddSpells(new Invisibility("3. David's dashing disapperance <Invisibility>"));
            myspellbook.AddSpells(new Teleport("4. Stan's stunning shifter <Teleport>"));
            myspellbook.AddSpells(new Heal("5. Lachlan's lavish longevity <Heal>"));

            //to convert list to an array because PrintSpellNamesspellname and PrintSpellNames take in parameter of an array , not list
            Spell[] spellbook = myspellbook.Spells.ToArray();

            ProgramInitialise(spellbook);

            do
            {
                choice = Console.ReadLine();
                switch (choice)
                {
                case "1":
                    s = myspellbook[0];
                    Console.WriteLine("Choose between cat and house\n");
                    ObjectString = Console.ReadLine();
                    objects      = CastOnObject(ObjectString.ToLower());
                    Console.WriteLine(s.Cast(objects));
                    saveAllCastedSpell.AddSpells(s);
                    break;

                case "2":
                    s = myspellbook[1];
                    Console.WriteLine("Choose between cat and house\n");
                    ObjectString = Console.ReadLine();
                    objects      = CastOnObject(ObjectString.ToLower());
                    Console.WriteLine(s.Cast(objects));
                    saveAllCastedSpell.AddSpells(s);
                    break;

                case "3":
                    s = myspellbook[2];
                    Console.WriteLine("Choose between cat and house\n");
                    ObjectString = Console.ReadLine();
                    objects      = CastOnObject(ObjectString.ToLower());
                    Console.WriteLine(s.Cast(objects));
                    saveAllCastedSpell.AddSpells(s);
                    break;

                case "4":
                    s = myspellbook[3];
                    Console.WriteLine("Choose between cat and house\n");
                    ObjectString = Console.ReadLine();
                    objects      = CastOnObject(ObjectString.ToLower());
                    Console.WriteLine(s.Cast(objects));
                    saveAllCastedSpell.AddSpells(s);
                    break;

                case "5":
                    s = myspellbook[4];
                    Console.WriteLine("Choose between cat and house\n");
                    ObjectString = Console.ReadLine();
                    objects      = CastOnObject(ObjectString.ToLower());
                    Console.WriteLine(s.Cast(objects));
                    saveAllCastedSpell.AddSpells(s);
                    break;

                case "6":
                    Console.WriteLine("Choose between cat and house\n");
                    ObjectString = Console.ReadLine();
                    objects      = CastOnObject(ObjectString.ToLower());
                    CastAllSpells(spellbook, objects);
                    foreach (Spell spell in spellbook)
                    {
                        saveAllCastedSpell.AddSpells(spell);
                    }
                    break;

                case "s":
                    saveAllCastedSpell.Save("Spell.txt");
                    break;

                case "c":
                    Console.Clear();
                    ProgramInitialise(spellbook);
                    break;

                case "l":
                    try
                    {
                        saveAllCastedSpell.Load("Spell.txt");
                    }
                    catch (Exception e)
                    {
                        Console.Error.WriteLine("Error loading file:{0}", e.Message);
                    }
                    break;

                case "q":
                    System.Environment.Exit(1);
                    break;

                default:
                    Console.WriteLine("Error , please try again");
                    break;
                }

                do
                {
                    Console.WriteLine("Do you want to continue? Yes or No \n");
                    Continue = Console.ReadLine();
                } while(Continue.ToLower() != "yes" && Continue.ToLower() != "no" && Continue.ToLower() != "y" && Continue.ToLower() != "n");
            } while(Continue.ToLower() == "yes" || Continue.ToLower() == "y");
            Console.WriteLine("See you again!!");
            Console.ReadKey();
        }