Conversiones seguras en C# con is y as
Clase 6 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
Viendo ahora - 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#
11:47 min - 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
Domina conversiones seguras en C# con los operadores is y as, evita excepciones en tiempo de ejecución y aprende a construir un método que recolecta todos los objetos de una escuela en una sola lista. Con un enfoque práctico en Visual Studio Code y apoyo del debugger, verás cómo blindar tu código y preparar el terreno para clasificar objetos por tipo.
¿Cómo evitar excepciones al convertir tipos en C# con is y as?
Usar conversiones sin validar dispara errores en tiempo de ejecución. La estrategia es sencilla: primero comprueba el tipo, luego convierte. Con is verificas compatibilidad y con as obtienes el objeto o nul sin romper la ejecución.
¿Cuándo usar is?
El patrón es comprobar y hacer casting explícito. Si no coincide, no ejecuta y evitas la excepción.
if (objeto is Alumno)
{
var alumnoRecuperado = (Alumno)objeto; // Conversión segura tras validar.
// Usar alumnoRecuperado.
}
Puntos clave: - is confirma si el objeto es de un tipo específico. - Si no coincide, el bloque no se ejecuta y no hay excepción. - Útil cuando necesitas lógica condicionada al tipo.
¿Cuándo usar as?
as intenta convertir y, si no puede, devuelve nul. No lanza excepción y el flujo es más limpio. Según la explicación, es la opción más recomendada por su claridad y menor código.
var alumnoRecuperado2 = objeto as Alumno;
if (alumnoRecuperado2 != null)
{
// Usar alumnoRecuperado2 con confianza.
}
Buenas prácticas: - Siempre valida nul tras usar as. - Evita conversiones directas sin verificación previa. - Prefiere as cuando luego vas a usar el objeto convertido.
¿Cómo construir un método para obtener todos los objetos de escuela?
La meta: devolver una colección con todos los elementos del modelo escolar. La escuela en sí, sus cursos, asignaturas, alumnos y evaluaciones. Se propone un método público que retorna List
¿Qué objetos incluye la colección?
La lista debe agrupar todo lo que compone la escuela.
- La escuela como objeto raíz.
- Los cursos de la escuela.
- Las asignaturas de cada curso.
- Los alumnos de cada curso.
- Las evaluaciones de cada alumno.
¿Cómo recorrer cursos, alumnos y evaluaciones?
Se inicia con la escuela, se agregan los cursos, luego se navega con foreach para sumar asignaturas, alumnos y, finalmente, evaluaciones.
public List<ObjetoEscuelaBase> GetObjetosDeEscuela()
{
var listaObj = new List<ObjetoEscuelaBase>();
// 1) Escuela.
listaObj.Add(this); // La escuela actual.
// 2) Cursos.
listaObj.AddRange(Cursos);
// 3) Asignaturas, alumnos y evaluaciones.
foreach (var curso in Cursos)
{
listaObj.AddRange(curso.Asignaturas);
listaObj.AddRange(curso.Alumnos);
foreach (var alumno in curso.Alumnos)
{
listaObj.AddRange(alumno.Evaluaciones);
}
}
return listaObj;
}
Claves de implementación: - Usa Add para la escuela y AddRange para colecciones. - Recorre con foreach para aplanar jerarquías. - Retorna la lista completa para reportes o inspección.
¿Qué limitaciones tiene la lista y por qué pensar en un diccionario por tipo?
Al ejecutar y depurar, se obtiene una lista con todos los objetos. Se reportó un volumen grande: 1181 objetos entre alumnos, cursos, asignaturas y evaluaciones. El debugger muestra tipos, pero poca información inmediata de cada instancia.
Limitaciones observadas: - La lista mezcla tipos y no facilita filtrado inmediato por clase. - En el debugger, identificar detalles requiere abrir cada elemento. - Para reportes, es útil obtener solo cursos, o solo asignaturas, sin recorrer todo.
Propuesta de mejora: - Cambiar la salida de lista a diccionario que clasifique intencionalmente por tipo. - Beneficios: acceso directo por categoría, filtrado inmediato, código más claro para reportes.
¿Te gustaría ver la clasificación por tipo con un diccionario y ejemplos prácticos de acceso? Cuéntame qué colección usarías y qué reportes te interesan generar.