/// <summary>
        /// Metodo che carica tutte le evoluzioni a partire da una lista di stringhe
        /// </summary>
        /// <param name="lines">Lista di stringhe contenenti le evoluzioni</param>
        public void GetEvoList(List<string> lines)
        {
            listaEvo = new List<Evolution>();

            while (lines.Count > 0)
            {
                try
                {
                    Evolution e = new Evolution(lines[0]);
                    listaEvo.Add(e);
                }
                catch (ProgramException) { }
                lines.RemoveAt(0);
            }
        }
        /// <summary>
        /// Metodo che carica tutte le evoluzioni a partire da una lista di stringhe
        /// </summary>
        /// <param name="lines">Lista di stringhe contenenti le evoluzioni</param>
        public void GetEvoList(List <string> lines)
        {
            listaEvo = new List <Evolution>();

            while (lines.Count > 0)
            {
                try
                {
                    Evolution e = new Evolution(lines[0]);
                    listaEvo.Add(e);
                }
                catch (ProgramException) { }
                lines.RemoveAt(0);
            }
        }
        /// <summary>
        /// Ottieni le evoluzioni del Pokémon selezionato
        /// </summary>
        /// <param name="index">Numero del Pokémon</param>
        /// <returns>Lista di evoluzioni</returns>
        public List<Evolution> GetEvos(int index)
        {
            List<Evolution> evos = new List<Evolution>();
            Evolution pre = new Evolution();

            foreach (Evolution e in listaEvo)
            {
                if (e.Higher == index)
                {
                    pre = e;
                    break;
                }
            }

            if (pre.Lower != 0) // esiste una preevoluzione
            {
                foreach (Evolution e in listaEvo)
                {
                    if (e.Higher == pre.Lower) // se index è il terzo stadio
                    {
                        evos.Add(e);
                        break;
                    }
                }
                evos.Add(pre);
            }

            bool hasPostEvo = false;

            foreach (Evolution e in listaEvo)
            {
                if (e.Lower == index)
                {
                    evos.Add(e);
                    hasPostEvo = true;
                }
            }

            if (hasPostEvo)
            {
                for (int i = 0; i < evos.Count; i++)
                {
                    if (evos[i].Lower == index)
                    {
                        foreach (Evolution e in listaEvo)
                        {
                            if (e.Lower == evos[i].Higher)
                                evos.Add(e);
                        }
                    }
                }
            }
            GenerationClass gen = GenerationClass.Instance;
            for (int i = evos.Count - 1; i >= 0; i--)
            {//Se è una evoluzione futura rimuovila
                if (evos[i].Lower > gen.GenerationLimit[gen.ActualGeneration]
                    || evos[i].Higher > gen.GenerationLimit[gen.ActualGeneration])
                    evos.RemoveAt(i);
            }
            return evos;
        }
        /// <summary>
        /// Ottieni le evoluzioni del Pokémon selezionato
        /// </summary>
        /// <param name="index">Numero del Pokémon</param>
        /// <returns>Lista di evoluzioni</returns>
        public List <Evolution> GetEvos(int index)
        {
            List <Evolution> evos = new List <Evolution>();
            Evolution        pre  = new Evolution();

            foreach (Evolution e in listaEvo)
            {
                if (e.Higher == index)
                {
                    pre = e;
                    break;
                }
            }

            if (pre.Lower != 0) // esiste una preevoluzione
            {
                foreach (Evolution e in listaEvo)
                {
                    if (e.Higher == pre.Lower) // se index è il terzo stadio
                    {
                        evos.Add(e);
                        break;
                    }
                }
                evos.Add(pre);
            }

            bool hasPostEvo = false;

            foreach (Evolution e in listaEvo)
            {
                if (e.Lower == index)
                {
                    evos.Add(e);
                    hasPostEvo = true;
                }
            }

            if (hasPostEvo)
            {
                for (int i = 0; i < evos.Count; i++)
                {
                    if (evos[i].Lower == index)
                    {
                        foreach (Evolution e in listaEvo)
                        {
                            if (e.Lower == evos[i].Higher)
                            {
                                evos.Add(e);
                            }
                        }
                    }
                }
            }
            GenerationClass gen = GenerationClass.Instance;

            for (int i = evos.Count - 1; i >= 0; i--)
            {//Se è una evoluzione futura rimuovila
                if (evos[i].Lower > gen.GenerationLimit[gen.ActualGeneration] ||
                    evos[i].Higher > gen.GenerationLimit[gen.ActualGeneration])
                {
                    evos.RemoveAt(i);
                }
            }
            return(evos);
        }