static void MenuFiguras()
        {
            while (true)
            {
                Console.WriteLine("\nLas figuras que tenemos disponibles son:");
                for (int i = 0; i < figureTypes.Count; i++)
                {
                    Console.WriteLine($"[{i + 1}]: {figureTypes[i].Name}");
                }
                Console.WriteLine($"[{OPCION_SALIR}] Volver al menú\n");

                int opcion = Usuario.PedirEntero("¿Cuál quieres seleccionar?");

                if (opcion == 0)
                {
                    break;
                }
                else
                {
                    int  indice        = opcion - 1;
                    bool estaEnLaLista = indice >= 0 || indice < figureTypes.Count;
                    if (estaEnLaLista)
                    {
                        Type tipoFigura        = figureTypes[indice];
                        var  constructorInfo   = tipoFigura.GetConstructors()[0];
                        var  constructorParams = constructorInfo.GetParameters();
                        var  parameters        = new object[constructorParams.Length];
                        for (int i = 0; i < constructorParams.Length; i++)
                        {
                            parameters[i] = Usuario.PedirLado(string.Format("\nIngresa el valor de {0}:", constructorParams[i].Name));
                        }
                        Figura figura = (Figura)constructorInfo.Invoke(parameters);
                        MenuFigura(figura);
                    }
                    else
                    {
                        Log.Error($"La opción ingresada ({opcion}) no existe");
                    }
                }
            }
        }
        static void MenuFigura(Figura figura)
        {
            Log.Success($"\n¡Haz creado tu {figura.Nombre}!");

            while (true)
            {
                Console.WriteLine("");
                Log.Question($"¿Qué quieres saber de este {figura.Nombre}?");
                Console.WriteLine($"[{OPCION_CALCULAR_AREA}] Calcular área");
                Console.WriteLine($"[{OPCION_CALCULAR_PERIMETRO}] Calcular perímetro");
                Console.WriteLine($"[{OPCION_SALIR}] Volver al menú de figuras");
                Console.WriteLine("");

                string opcion = Console.ReadLine();

                if (opcion == OPCION_CALCULAR_AREA)
                {
                    Log.Write("Calculando área...\n");
                    Log.Success($"El área de tu {figura.Nombre} es {figura.Area()}\n");
                    Usuario.PresionarParaContinuar();
                }
                else if (opcion == OPCION_CALCULAR_PERIMETRO)
                {
                    Log.Write("Calculando perímetro...\n");
                    Log.Success($"El perímetro de tu {figura.Nombre} es {figura.Perimetro()}\n");
                    Usuario.PresionarParaContinuar();
                }
                else if (opcion == OPCION_SALIR)
                {
                    Console.Clear();
                    break;
                }
                else
                {
                    Log.Error("La opción ingresada ({0}) no existe");
                    Usuario.PresionarParaContinuar();
                }
            }
        }