public static string Imprimir(List <FormaGeometrica> formas, int idioma) { var sb = new StringBuilder(); //Instancié factoria de idioma FactoriaIdioma factoriaI = new FactoriaIdioma(); //Ejecuto el método crear idioma, que según el parámetro de la funcion me busca a que //valor del enum pertenece Idioma idiomaFinal = factoriaI.crearIdioma(idioma); if (!formas.Any()) { sb.Append("<h1>" + idiomaFinal.msjSinRegistros() + "</h1>"); } else { sb.Append("<h1>" + idiomaFinal.mostrarHeader() + "</h1>"); FactoriaForma factoriaF = new FactoriaForma(); List <Forma> listaDeFormas = new List <Forma>(); Forma unaForma; //Agrupo las formas para después poder ir concatenando POR forma. var formasAgrupadas = formas.GroupBy(x => x.Tipo).Where(g => g.Count() > 0).Select(y => y).ToList(); for (var i = 0; i < formasAgrupadas.Count; i++) { //Uso el metodo de la factoria para instanciar el objeto que sea según la Key unaForma = factoriaF.crearForma(formasAgrupadas[i].Key); unaForma.incrementarCantidad(); unaForma.cantidadForma = formasAgrupadas[i].Count(); //Sumo todas las areas adentro de cada listado agrupado unaForma.areaTotal = formasAgrupadas[i].Sum(unElem => unaForma.area(unElem._lado)); //Sumo todas los perímetros adentro de cada listado agrupado unaForma.perimetroTotal = formasAgrupadas[i].Sum(unElem => unaForma.perimetro(unElem._lado)); listaDeFormas.Add(unaForma); sb.Append(ObtenerLinea(unaForma, idiomaFinal)); } // FOOTER sb.Append("TOTAL:<br/>"); sb.Append(listaDeFormas.Sum(unaF => unaF.cantidadForma) + " " + (idiomaFinal.formaTraducido()) + " "); sb.Append((idiomaFinal.perimetroTraducido()) + (listaDeFormas.Sum(unaF => unaF.perimetroTotal)).ToString("#.##") + " "); sb.Append("Area " + (listaDeFormas.Sum(unaF => unaF.areaTotal)).ToString("#.##")); } return(sb.ToString()); }