static void FormasDeConstruirEnumeradoresEncadenados( ) { Console.WriteLine("DEMOSTRACIÓN Diferentes maneras de construir un enumerador encadenado\n"); IEnumerador m1 = new Filtrar(new Pares(new Numeros(10)), i => i < 7); Mostrar(m1, "INSTANCIAS ANIDADAS"); IEnumerador m2 = FiltrarE(ParesE(NumerosE(10)), i => i < 7); Mostrar(m2, "FUNCIONES ANIDADAS"); IEnumerador m3 = new Numeros(10); m3 = new Pares(m3); m3 = new Filtrar(m3, i => i < 7); Mostrar(m3, "SECUENCIAL"); IEnumerador m4 = NumerosE(10); m4 = ParesE(m4); m4 = FiltrarE(m4, i => i < 7); Mostrar(m4, "SECUENCIALES con FUNCIÓN AUXILIAR"); IEnumerador m5 = NumerosE(10) // Tambien se puede escribir como "10.NumerosE()" .ParesE() .FiltrarE(i => i < 7); Mostrar(m5, "ENCADENADA con EXTENCIÓN DE MÉTODOS"); Console.ReadLine(); }
static void Mostrar(this IEnumerador origen, string descripcion) { Console.WriteLine($" MOSTRAR: Creación de instancias > {descripcion}"); while (origen.Avanzar()) { Console.WriteLine($" · {origen.Actual} "); } Console.WriteLine(".\n"); }
public Filtrar(IEnumerador numero, Condicion condicion) { this.numero = numero; this.condicion = condicion; }
public Pares(IEnumerador numero) { this.numero = numero; }
static IEnumerador FiltrarE(this IEnumerador numeros, Condicion condicion) => new Filtrar(numeros, condicion);
static IEnumerador ParesE(this IEnumerador numeros) => new Pares(numeros);
public static void Recorrer(this IEnumerador lista) => Recorrer(lista.GetEnumerar());