Parámetro opcional para controlar impresión en C#
Clase 20 de 35 • Curso de C# con .Net Core 2.1
Contenido del curso
Etapa 5 – POO reutilicemos nuestro código
- 2

Herencia para reutilizar código C#
10:30 min - 3

Herencia y Polimorfismo en Programación Orientada a Objetos
11:42 min - 4

Polimorfismo en Programación Orientada a Objetos
13:17 min - 5

Casting en C#: cuándo funciona y cuándo falla
07:09 min - 6

Conversiones seguras en C# con is y as
12:44 min - 7

Sobrescribir ToString para depuración en C#
08:15 min
Etapa 6- Ajustes y funcionalidad
Etapa 7 – Preparando información para nuestros reportes
- 11

Manejo Avanzado de Métodos y Parámetros en Programación
15:43 min - 12

Manejo de Parámetros de Salida en Visual Studio Code
04:38 min - 13

Sobrecarga de Métodos para Parámetros de Salida Opcionales
05:51 min - 14

Optimización de Listas: Buenas Prácticas en C#
04:16 min - 15

Dictionary: cómo funciona en C#
11:14 min - 16

Diccionarios con polimorfismo en C#
10:48 min - 17

Uso de Constantes y Enumeraciones para Optimizar Diccionarios en C#
11:33 min - 18

Foreach anidado para diccionarios en C#
13:47 min - 19

Depuración de diccionarios en C#
09:37 min - 20

Parámetro opcional para controlar impresión en C#
Viendo ahora - 21

Cómo usar switch en lugar de if/else
14:30 min - 22

Números aleatorios y eventos en C#
12:52 min - 23

Diccionarios y Refactoring en Programación Básica
02:13 min
Etapa 8 – Consultas
- 24

Cómo crear un reporteador en C sharp
11:42 min - 25

Generación segura de reportes en sistemas de información
10:21 min - 26

Construcción de reportes con LINQ en C#
11:48 min - 27

Diccionario con evaluaciones por asignatura
08:32 min - 28

Tipos anónimos en LINQ para reportes complejos
10:52 min - 29

Cálculo del Promedio de Notas Agrupadas por Alumno y Asignatura
10:46 min - 30

Creación de Tipos de Datos Personalizados en Programación Avanzada
12:05 min - 31

Generación de Reportes con LINQ en C#
02:09 min
Etapa 9 – Creando una UI de Consola
Controla la salida en consola con precisión en C#. Aquí verás cómo añadir un parámetro opcional para decidir si mostrar evaluaciones, ordenar la lógica condicional para evitar errores y personalizar la impresión por tipo de objeto. Además, se deja lista la ruta para refactorizar múltiples if hacia switch de forma más clara.
¿Cómo controlar la impresión de evaluaciones en C#?
Para no inundar la consola, se agrega un parámetro opcional que decide si imprimir evaluaciones. Por defecto es false para reducir ruido. La clave está en el orden de las preguntas: primero se verifica el tipo y luego la intención de imprimir. Así evitamos imprimir por error cuando el flag está en false.
- Usa un parámetro opcional: imprimirEvaluaciones = false.
- Aplica filtrado por tipo antes del flag.
- Imprime todo lo que no sea evaluación sin restricciones.
Ejemplo en C# (patrones de tipo y flujo claro):
data void ImprimirDiccionario(Dictionary<string, IEnumerable<object>> datos, bool imprimirEvaluaciones = false)
{
foreach (var par in datos)
{
foreach (var val in par.Value)
{
if (val is Evaluacion eva)
{
if (imprimirEvaluaciones)
Console.WriteLine(eva.ToString());
}
else if (val is Escuela esc)
{
Console.WriteLine($"Escuela: {esc}");
}
else if (val is Alumno alu)
{
// Solo el nombre del alumno.
Console.WriteLine($"Alumno: {alu.Nombre}");
}
else
{
Console.WriteLine(val);
}
}
}
}
¿Qué error lógico conviene evitar?
Combinar en una sola condición “quiero imprimir” y “es evaluación” puede llevar a que el bloque else imprima todo lo demás sin control. La forma segura es:
- Primero: if (val es Evaluacion).
- Luego: if (imprimirEvaluaciones) imprimir.
- En caso contrario: imprimir siempre los demás tipos.
¿Cómo validar el resultado y depurar?
La verificación se hace con Visual Studio y la consola.
- Ejecuta con dotnet run para revisar la salida.
- Limpia la consola antes de reintentar si ves datos viejos.
- Usa punto de interrupción y F5 para depurar paso a paso.
- Observa el tipo real en tiempo de ejecución y el valor del flag.
¿Cómo personalizar la salida por tipo con if?
Se decide qué mostrar según el tipo concreto. Cuando es escuela, se imprime su ToString con etiqueta. Para alumno, solo el nombre. Para otros tipos, el valor tal cual. Este patrón organiza la lectura y facilita la depuración.
- Escuela: etiqueta “Escuela:” y su ToString.
- Alumno: solo el nombre.
- Evaluación: respetar el flag imprimirEvaluaciones.
- Otros tipos: impresión por defecto.
Código ilustrativo:
if (val is Evaluacion eva)
{
if (imprimirEvaluaciones)
Console.WriteLine(eva.ToString());
}
else if (val is Escuela esc)
{
Console.WriteLine($"Escuela: {esc}");
}
else if (val is Alumno alu)
{
Console.WriteLine($"Alumno: {alu.Nombre}");
}
else
{
Console.WriteLine(val);
}
Puntos clave que se aplican en el flujo:
- Uso de foreach para recorrer colecciones.
- Manejo de condiciones con if y orden correcto de evaluación.
- Llamadas a ToString para salidas legibles.
- Separación de responsabilidades: flag solo afecta a evaluaciones.
¿Cómo preparar la refactorización con switch y gettype?
Cuando crecen los if anidados, es más claro migrar a switch. La idea es conmutar por el tipo del objeto para mantener casos bien separados. La transición propuesta se basa en val.GetType.
- Objetivo: reemplazar múltiples if por switch.
- Entrada del switch: val.GetType().
- Beneficio: casos explícitos por tipo y mantenimiento sencillo.
Borrador de estructura:
switch (val.GetType())
{
case Type t when t == typeof(Evaluacion):
if (imprimirEvaluaciones) Console.WriteLine(val.ToString());
break;
case Type t when t == typeof(Escuela):
Console.WriteLine($"Escuela: {val}");
break;
case Type t when t == typeof(Alumno):
// Solo el nombre del alumno.
var alu = (Alumno)val;
Console.WriteLine($"Alumno: {alu.Nombre}");
break;
default:
Console.WriteLine(val);
break;
}
¿Te gustaría ver el refactor completo a switch y comparar ambos enfoques paso a paso? Deja tu comentario con tus dudas o variantes que quieras probar.