A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Impresi贸n de objetos de un diccionario

20/35
Recursos

Aportes 38

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

if(!(val is Evaluacion) || ImprimirEval)
                        Console.WriteLine(val);

Lo hice de esta manera

        public void imprimirDiccionario(Dictionary<LlaveDiccionario, IEnumerable<ObjetoColegioBase>> dicc, bool eval = false)
        {
            foreach (var item in dicc)
            {
                Printer.EscribirTitulo(item.Key.ToString());
                foreach (var val in item.Value)
                {
                    if((val is Evaluacion && eval) || !(val is Evaluacion))
                    {
                        Console.WriteLine($"{val}");
                    }
                }
            }
        }

Me a costado mucho seguir el curso.!

Es m谩s sencillo as铆, desde mi humilde opini贸n:

if ((impEval && val is Evaluacion) || !(val is Evaluacion)) 
                        Console.WriteLine($"{obj.Key} => {val}");

Esta es la forma en que lo hice sin usar IF

 foreach (var val in item.Value)
                {
                    var indice=val.GetType().ToString().LastIndexOf('.')+1;
                    if (!(val is Evaluacion) || impEvaluacion)
                       Console.WriteLine(val.GetType().ToString().ToUpper().Substring(indice) + " : " + val);
                 
                }```

Asi me qued贸.

public void ImprimirDiccionario(Dictionary<LLaveDiccionario,List<ObjetoEscuelaBase>> dic,
            bool imprEval=false)
        {
            foreach (var obj in dic)
            {
                Printer.WriteTitle(obj.Key.ToString());
                foreach (var val in obj.Value)
                {
                    if(imprEval || !(val is Evaluaci贸n))//Imprime todos los objetos si imprEval es verdadero sino imprime solo no imprime Evaluaciones.
                        System.Console.WriteLine(val);
                }
            }
            
        }```

pues yo compare si lo que querian era igual al tipo de objeto que estaba en el bucle:

        public void PrintDic(Dictionary<TypeOfSchoolObjets,IEnumerable<ObjetoEscuelaBase>> diccionario, TypeOfSchoolObjets tipo =TypeOfSchoolObjets.Evaluacion )
        {
            var say = new List<ObjetoEscuelaBase>();
            foreach (var item in diccionario)
            {
                say = new List<ObjetoEscuelaBase>();
                if (tipo == item.Key)
                {    
                    foreach (var obj in item.Value)
                    {
                        say.Add(obj);
                    }
                Displays.printObjList(say,item.Key + "");
                }
            }
        }

if(!(!imprimirEvaluaciones && val is Evaluaci贸n))

En mi caso la hice as铆

        public void ImprimirDiccionario(Dictionary<LlaveDic, IEnumerable<ObjetoEscuelaBase>> dic,
            bool traeEvaluaciones = true,
            bool traeAlumnos = true,
            bool traeAsignaturas = true,
            bool traeCursos = true)
        {
            foreach (var keyValPair in dic)
            {
                Printer.WriteTitle(keyValPair.Key.ToString()); // va a imprimir, por ejemplo Curso, Escuela, etc.
                foreach (var val in keyValPair.Value)
                {
                    // ! aca iteramos dentro de los values del diccionario, que en este caso, son ObjetosEscuelaBase
                    if (val is Curso && traeCursos) // ejemplo clarisimo de downcasting
                    {
                        Curso cur = (Curso)val;
                        System.Console.WriteLine($"Curso: {cur.Nombre}      Alumnos: {cur.Alumnos.Count}");
                    }
                    if (val is Alumno && traeAlumnos)
                    {
                        Alumno alu = (Alumno)val;
                        double avg = SacarPromedioAlumno(alu.Evaluaciones);
                        System.Console.WriteLine($"Curso: {alu.Nombre}      Evaluaciones: {avg}");
                    }
                    if (val is Asignatura && traeAsignaturas)
                    {
                        Asignatura mat = (Asignatura)val;
                        System.Console.WriteLine($"Materia: {mat.Nombre}");
                    }
                    if (val is Evaluaci贸n && traeEvaluaciones)
                    {
                        Evaluaci贸n e = (Evaluaci贸n)val;
                        System.Console.WriteLine($"Nota: {e.Nota}      Materia: {e.Asignatura.Nombre}");
                    }
                    // si lo que quiseramos hacer es ya sea ordenar los resultados 
                    // yo agregaria cada objeto a una lista particular de cada objeto, 
                    // y despues un lindo foreach para imprimir de a listas, entones que lo que tengo 
                    // ahora quede como un "creador de listas" y hacer otra funcion que imprima las listas, 
                    // pero como no soy programador no opino.
                }
            }
        }

En mi caso hice la funcion de esta forma.

public void ImprimirDiccionario(Dictionary<LlaveDiccionario, IEnumerable<ObjetoEscuelaBase>> dic,
                    bool imprimirEvaluaciones = false,
                    bool imprimirCursos = false,
                    bool imprimirAsignaturas = false,
                    bool imprimirAlumnos = false)
        {
            foreach(var obj in dic)
            {
                Printer.WriteTitle(obj.Key.ToString());

                foreach(var value in obj.Value)
                {
                    if(value is Evaluacion  && !imprimirEvaluaciones) continue;
                    if(value is Curso       && !imprimirCursos) continue;
                    if(value is Asignatura  && !imprimirAsignaturas) continue;
                    if(value is Alumno      && !imprimirAlumnos) continue;
                    Console.WriteLine(value);
                }
            }
        }

Aunque aun muestra los carteles de titulo, estoy viendo como modificar eso.

馃く

Asi me funciona

<public void ImprimirDiccionario(Dictionary<LlavesDiccionario, IEnumerable<ObjetoEscuelaBase>> dic,
        bool imprEval = false){
            foreach (var obj in dic)
            {
                Printer.DrawTitle(obj.Key.ToString());
                
                
                foreach(var valor in obj.Value)
                {
                    if(imprEval == true){
                        Console.WriteLine(valor);
                    }
                    else{
                        dic.Remove(LlavesDiccionario.Evaluaciones);
                        Console.WriteLine(valor);
                    }   
                }
            }
        }>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = 0;
            int numero1 = 0; int numero2 = 0; int numero3 = 0; int numero4 = 0;
           
            {
                Console.WriteLine("Primer Parcial");
                numero1 = Int32.Parse(Console.ReadLine());
            }
            if (numero1 > 15 == true)
            {
                Console.WriteLine("Calificacion Invalida");
                Console.WriteLine("Introduzca Nuevamente");
                numero1 = Int32.Parse(Console.ReadLine());
            }
           

            {
                Console.WriteLine("Segundo Parcial");
                numero2 = Int32.Parse(Console.ReadLine());
            }
            if (numero2 > 15 == true)
            {
                Console.WriteLine("Calificacion Invalida");
                Console.WriteLine("Introduzca Nuevamente");
                numero2 = Int32.Parse(Console.ReadLine());
            }
           
            {
                Console.WriteLine("Practica");
                numero3 = Int32.Parse(Console.ReadLine());
            }
            if (numero3 > 30 == true)
            {
                Console.WriteLine("Calificacion Invalida");
                Console.WriteLine("Introduzca Nuevamente");
                numero3 = Int32.Parse(Console.ReadLine());
            }
           
            {
                Console.WriteLine("Examen Final");
                numero4 = Int32.Parse(Console.ReadLine());
            }
            if (numero4 > 40 == true)
            {
                Console.WriteLine("Calificacion Invalida");
                Console.WriteLine("Introduzca Nuevamente");
                numero4 = Int32.Parse(Console.ReadLine());
            }

            {
                sum = numero1 + numero2 + numero3 + numero4;
                Console.WriteLine("Su Calificacion es : {0}", sum);
            }


            if (sum <= 60 == true)
            {
                Console.WriteLine("Reprobado ");
            }
            else
                if (sum <= 69 == true)
                {
                    Console.WriteLine("Extraordinario");
                }
                else
                   
                     if (sum <= 95 == true)
                            {
                                Console.WriteLine("Aprobado");
                            }
                            else
                                if (sum <= 100 == true)
                                {
                                    Console.WriteLine("Excelente");
                                }

            Console.ReadKey();

        }
    }
}```

Hola buen d铆a

tengo este problema:

Codigo:

public void ImprimirDiccionario(Dictionary<LlavesDiccionario,IEnumerable<ObjetoEscuelaBase>> dic,
bool imprEval = false)
{
foreach (var obj in dic)
{
Printer.WriteTitle(obj.Key.ToString());
//Console.WriteLine(obj);
foreach (var val in obj.Value)
{
if ( val is Evaluacion){
if (imprEval)
Console.WriteLine(val);
}
else
Console.WriteLine(val);
}
}
}

al compilar me sale este error:

<h1>Pais: Colombia, Ciudad: Bogota</h1> <h1>| Curso |</h1>

Unhandled exception. System.InvalidCastException: Unable to cast object of type 鈥楽ystem.Char鈥 to type 鈥楥oreEscuela.Entidades.ObjetoEscuelaBase鈥.
at System.Linq.Enumerable.CastIterator[TResult](IEnumerable source)+MoveNext()
at CoreEscuela.EscuelaEngine.ImprimirDiccionario(Dictionary`2 dic, Boolean imprEval) in D:\cursoPlatzi\platzi\CoreEscuela\App\EscuelaEngine.cs:line 67
at CoreEscuela.Program.Main(String[] args) in D:\cursoPlatzi\platzi\CoreEscuela\Program.cs:line 50
PS D:\cursoPlatzi\platzi\CoreEscuela>

Hola, aqu铆 mi implementaci贸n: Si valor es de tipo Evaluaci贸n y printEvaluacion es falso, hago que el ciclo se contin煤e con el siguiente valor con la palabra reservada continue. En caso contrario, que imprima el valor llano y plano, anexo c贸digo:

public void ImprimirDiccionario( Dictionary< LlaveDiccionario, IEnumerable<ObjetoEscuelaBase> > dicc, bool printEval = false)
        {
            foreach (var obj in dicc)
            {
                Printer.WriteTitle( obj.Key.ToString() );
                foreach (var val in obj.Value)
                {
                    if ( val is Evaluacion && !printEval )
                    {
                        continue;
                    }
                    else
                    {
                        Console.WriteLine( val );
                    }
                }
            }
        }
foreach(var val in obj.Value)
                {
                    if(imprimirEvaluaciones == false)
                    {
                        if ( !(val is Evaluacion) )
                            Console.WriteLine(val);
                    }
                        
                }

para el foreach yo usar铆a el continue; para cuando es evaluaci贸n y no quiero imprimirlo, pase al siguiente ciclo de esta manera

 public void PrintDictionary( Dictionary<DictionaryKeys, IEnumerable<SchoolBase>> dic, bool printEval = false){
            foreach(var obj in dic){
                Printer.WriteTitle(obj.Key.ToString());
             
                foreach(var pair in obj.Value){
                    if(pair is Evaluations && !printEval)
                        continue; 
                    else
                        Console.WriteLine(pair);  
                }
            }
        }
 foreach (var obj in dic)
                {
                    Console.WriteLine(obj.Key.ToString());
                    Console.WriteLine(obj);
                    foreach (var kvp in obj.Value)
                    {
                        if (ImpriEval && kvp is Evaluaci贸n)
                        {
                            Console.WriteLine(kvp);
                        }else if(!(kvp is Evaluaci贸n))
                        {
                            Console.WriteLine(kvp);
                        }
                    }
                }

yo lo hice asi XD

Para hacer la impresion de los datos de un dictionary lo intentaria de la siguiente manera

Dictionary<string, string> datos = new Dictionary<string, string>();
datos.Add(鈥1鈥, 鈥淢ensaje uno鈥);
datos.Add(鈥2鈥, 鈥淢ensaje dos鈥);

        Console.WriteLine(datos.Values.ToString());

Resultad貌

鈥楨studiantes.exe鈥 (CLR v4.0.30319: DefaultDomain): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: DefaultDomain): 鈥楥:\Users\Sem-6-INGENIERIAINDU\source\repos\Estudiantes\Estudiantes\bin\Debug\Estudiantes.exe鈥 cargado. S铆mbolos cargados.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.String]

Tambien el foreach de la siguiente manera

Dictionary<string, string> datos = new Dictionary<string, string>();
datos.Add(鈥1鈥, 鈥淢ensaje uno鈥);
datos.Add(鈥2鈥, 鈥淢ensaje dos鈥);
foreach(var obj in datos) {
Console.WriteLine(obj.Key);
}

Resultado
鈥橢studiantes.exe鈥 (CLR v4.0.30319: DefaultDomain): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: DefaultDomain): 鈥楥:\Users\Sem-6-INGENIERIAINDU\source\repos\Estudiantes\Estudiantes\bin\Debug\Estudiantes.exe鈥 cargado. S铆mbolos cargados.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
鈥楨studiantes.exe鈥 (CLR v4.0.30319: Estudiantes.exe): 鈥楥:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll鈥 cargado. Se omiti贸 la carga de s铆mbolos. El m贸dulo est谩 optimizado y la opci贸n del depurador 鈥楽贸lo mi c贸digo鈥 est谩 habilitada.
1
2

Al desactivar todo, tienes la posibilidad de controlar el c贸digo a voluntad.

Nota: solo no activo evaluaciones鈥; te da la posibilidad de hacer m煤ltiples cosas

foreach (var val in obj.Value)
{
	if (imprEval || !(val is Evaluaci贸n)){
		if (val is Escuela)
			Console.WriteLine("Escuela: " + val);
		if (val is Alumno)
			Console.WriteLine("Alumno: " + val);
		if (val is Curso)
			Console.WriteLine("Curso: " + val);
		if (val is Asignatura)
			Console.WriteLine("Asignatura: " + val); 
	}
}
if(imprEval || !(val is Evaluacion)) {}

Si esta habilitada la evaluacion imprime todo, ya que al ser un OR al cumplirse la primera condici贸n es suficiente, en caso que no est茅 habilitada las evaluaciones comprueba la segunda condici贸n e imprime si el valor es distinto a Evaluaci贸n.

Un poco de mas c贸digo pero creo que un poco mas optimo

public void ImprimirDiccionario(Dictionary<LlaveDiccionario,IEnumerable<ObjetoEscuelaBase>> dic,bool imprimirevaluaciones = false)
        {
            foreach (var obj in dic)
            {
                if (obj.Key == LlaveDiccionario.Evaluacion)
                {
                    if (imprimirevaluaciones)
                    {
                        Util.Printer.Dibujar_Titulo(obj.Key.ToString());
                        foreach (var val in obj.Value)
                        {
                            Console.WriteLine(val);
                        }
                    }

                }
                else
                {
                    Util.Printer.Dibujar_Titulo(obj.Key.ToString());
                    foreach (var val in obj.Value)
                    {
                        Console.WriteLine(val);
                    }
                }          
            }            
        }

Excelente contenido, creo que se entro en una buena motivacion a como resolver el problema de imprimir o no las evaluaciones, Genial

Esta fue mi implementaci贸n

 public void ImprimirDiccionario(Dictionary<LlavesDiccionario, IEnumerable<ObjetoEscuelaBase>> dic, bool imprimirEval = false)
        {
            foreach (var obj in dic)
            {
                Printer.WriteTitle(obj.Key.ToString());

                foreach (var val in obj.Value)
                {
                   if (val is Evaluacion && imprimirEval)
                    {
                        Console.WriteLine(val);
                    } else if (val is Evaluacion && !imprimirEval)
                    {
                        continue;
                    } else
                    {
                        Console.WriteLine(val);
                    }
                }
            }
        }

se podr铆a evaluar en una sola linea creo.

public static void PrintDcit(bool evaluation = false)
           {
                  var objects = SchoolObjects();
                  foreach (var obj in objects)
                  {
                      Utilities.WriteTitle(obj.Key.ToString());
                      foreach (var val in obj.Value)
                      {
                         if(!evaluation &&  val is Evaluation)
                          {
                              continue;
                          }

                           Console.WriteLine(val);
                      }
                  }
           }
public void ImprimirDiccionario(Dictionary<LlaveDiccionario, IEnumerable<ObjetoEscuelaBase>> dic, bool imprEval = false){
            foreach (var obj in dic)
            {
                Printer.WriteTitle(obj.Key.ToString());
                
                foreach (var val in obj.Value)
                {
                    if (imprEval || !(val is Evaluacion)){
                        if (val is Escuela)
                            Console.WriteLine("Escuela: "+val);
                        else if (val is Alumno)
                            Console.WriteLine("Alumno: "+val.Nombre);
                        else if (val is Curso)
                            Console.WriteLine("Curso: "+val.Nombre);
                        else if (val is Asignatura)
                            Console.WriteLine("Asignatura: "+val.Nombre);
                        else
                            Console.WriteLine("Evaluacion: "+val);                    
                    }
                }
            }
        }```

No entiendo porque analiza los valores individuales de todo el diccionario si podria analizar las llaves. A cada llave ya les fue asignado una lista de Evaluaciones, Escuela o alumnos respectivamente.

if ( ! (value is Evaluacion) || printEval )

Solucion茅 la impresi贸n cuando no se quiere imprimir las evaluaciones de la siguiente manera:

public void ImprimirDiccionario(Dictionary<LlaveDiccionario, IEnumerable<ObjetoEscuelaBase>> dic, 
            bool ImprimirEval = false)
        {
            foreach (var obj in dic)
            {
                if(ImprimirEval && obj.Value is Evaluaci贸n)
                {
                    Printer.WriteTitle(obj.Key.ToString());
                    foreach (var valor in obj.Value)
                    {
                        Console.WriteLine(valor);
                    }
                }
                else
                {
                    if (obj.Key == LlaveDiccionario.Alumno || obj.Key == LlaveDiccionario.Asignatura || obj.Key == LlaveDiccionario.Curso || obj.Key == LlaveDiccionario.Escuela )
                    {
                        Printer.WriteTitle(obj.Key.ToString());
                        foreach (var valor in obj.Value)
                        {
                            Console.WriteLine(valor);
                        } 
                    }
                }
            }
        }```

Yo lo hice de esta forma

public void ImprimirDiccionario(Dictionary<LlavesDiccionario,IEnumerable<ObjetoEscuelaBase>> dic,
        bool imprimirEval=false)
        {
            foreach (var obj in dic)
            {
                Printer.DibujarTitulo(obj.Key.ToString());
                
                foreach (var val in obj.Value)
                {
                    if(imprimirEval && val is Evaluacion)
                      Console.WriteLine(val);
                    else if (!(val is Evaluacion))
                        Console.WriteLine(val);
                }
                
            }
        }

Esta es otra forma de hacerlo, fuera del loop de los valores de cada keyvalpair del diccionario, preguntamos la key y luego casteamos el value de IEnumerable<ParentEntity> a List<Alumno> SABIENDO que ese IEnumerable de ParentEntity vi茅ndolo de la misma forma que la introducimos en el diccionario en los videos anteriores y de esa forma recuperamos la lista de alumnos que ten铆amos originalmente para trabajar con ella

                if (obj.Key == LLaveDiccionario.Alumno)
                {
                    List<Alumno> alumnosRec = (List<Alumno>)obj.Value;
                    foreach (Alumno alum in alumnosRec)
                    {
                        WriteLine(alum.Nombre);
                    }
                }

Reci茅n a esta altura entend铆 el uso de los foreach anidados.

Mi implementaci贸n:

Yo lo hice de esta manera!

public void ImprimirDiccionario(Dictionary<LlaveDiccionario, IEnumerable<ObjetoEscuelaBase>> dictionary, bool imprimirEval = false)
        {

            foreach (var obj in dictionary)
            {
                Printer.WriteTitle(obj.Key.ToString());
                Console.WriteLine(obj);

                foreach (var val in obj.Value)
                {
                    if(val is Evaluaci贸n && imprimirEval)
                        Console.WriteLine(val);
                    else if(!(val is Evaluaci贸n))
                        Console.WriteLine(val);
                }
            }
        }```
private void PrintDictionary(Dictionary<DictionaryKey, IEnumerable<InitialCredential>> dictionary, bool printSub = true, bool printUser = true, bool printCourses = true)
        {
            foreach (var item in dictionary)
            {
                Printer.DTitle(item.Key.ToString());
                foreach (var item_2 in item.Value)
                {
                    if (printCourses && item_2 is Course)
                    {
                        Printer.DWrite($"{item_2.ToString()}");
                    }
                    else if (printSub && item_2 is Subject)
                    {
                        Printer.DWrite($"{item_2.ToString()}");
                    }
                    else if (printUser && item_2 is User)
                    {
                        Printer.DWrite($"{item_2.ToString()}");
                    }
                }
            }
        }

Genial.