if(!(val is Evaluacion) || ImprimirEval)
Console.WriteLine(val);
Introducción
Todo lo que aprenderás sobre C#
Etapa 5 – POO reutilicemos nuestro código
Reutilizando nuestro Código
Herencia
Polimorfismo
Problemas del polimorfismo
Lista de Objetos polimórfica
Utilizando ToString para mejorar la depuración
Etapa 6- Ajustes y funcionalidad
Implementación de interfaces
Uso de interfaces
Creación y uso de regiones
Etapa 7 – Preparando información para nuestros reportes
Parámetros de salida
Probando funcionalidades de parámetros de salida
Sobrecargas de métodos
Listas de solo Lectura
Diccionario Polimórfico
Implementación de un diccionario
Uso de numeraciones en diccionario
Introduciendo datos en un diccionario
Recorrido de datos en diccionario
Impresión de objetos de un diccionario
Uso de la sentencia switch
Eventos
Recapitulemos
Etapa 8 – Consultas
Creación del reporteador
Extrayendo datos de un diccionario de manera segura
Aprendiendo linq
Sentencia where de linq
Divide y triunfarás
Agrupamientos en linq
Tipos anónimos en consultas linq
Segundo Reto
Etapa 9 – Creando una UI de Consola
Excepciones y cascadeo de excepciones
Sentencia finally
Reto final
Cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Juan Carlos Ruiz
Aportes 43
Preguntas 0
if(!(val is Evaluacion) || ImprimirEval)
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}");
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}");
}
}
}
}
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 + "");
}
}
}
Si por algún motivo no te muestra la calificación en el objeto evaluación, es porque hay que hacer override al método ToString de la clase Evaluacion para que te mueste lo que quieres.
Lo hice de esta manera
public void ImprimirDiccionario(Dictionary<LlaveDic, IEnumerable<ObjetoEscuelaBase>> dic, LlaveDic llaveDic)
{
var diccionario = dic.Where(x => x.Key is LlaveDic.Escuela);
switch (llaveDic)
{
case LlaveDic.Cursos:
diccionario = dic.Where(x => x.Key is LlaveDic.Cursos);
break;
case LlaveDic.Asignaturas:
diccionario = dic.Where(x => x.Key is LlaveDic.Asignaturas);
break;
case LlaveDic.Alumnos:
diccionario = dic.Where(x => x.Key is LlaveDic.Alumnos);
break;
case LlaveDic.Evaluaciones:
diccionario = dic.Where(x => x.Key is LlaveDic.Evaluaciones);
break;
default:
break;
}
foreach (var k in diccionario)
{
Console.WriteLine(k.Key.ToString());
foreach (var v in k.Value)
{
Console.WriteLine(v);
}
}
}
public void ImprimirDiccionario(Dictionary<LlaveDiccionario, IEnumerable<ObjetoEscuelaBase>> dict, bool imprimirEvaluaciones = false)
{
foreach (var obj in dict)
{
Printer.WriteTitle($"{obj.Key}");
foreach (var item in obj.Value)
{
if (imprimirEvaluaciones || obj.Key != LlaveDiccionario.Evaluacion)
Console.WriteLine($"{item}");
}
}
}
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 ‘System.Char’ to type ‘CoreEscuela.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”, “Mensaje uno”);
datos.Add(“2”, “Mensaje dos”);
Console.WriteLine(datos.Values.ToString());
Resultadò
‘Estudiantes.exe’ (CLR v4.0.30319: DefaultDomain): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: DefaultDomain): ‘C:\Users\Sem-6-INGENIERIAINDU\source\repos\Estudiantes\Estudiantes\bin\Debug\Estudiantes.exe’ cargado. Símbolos cargados.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Só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”, “Mensaje uno”);
datos.Add(“2”, “Mensaje dos”);
foreach(var obj in datos) {
Console.WriteLine(obj.Key);
}
Resultado
’Estudiantes.exe’ (CLR v4.0.30319: DefaultDomain): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: DefaultDomain): ‘C:\Users\Sem-6-INGENIERIAINDU\source\repos\Estudiantes\Estudiantes\bin\Debug\Estudiantes.exe’ cargado. Símbolos cargados.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Sólo mi código’ está habilitada.
‘Estudiantes.exe’ (CLR v4.0.30319: Estudiantes.exe): ‘C:\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 ‘Só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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?