Manejo de excepciones en entrada por consola C#
Clase 32 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#
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
Aprende a crear un flujo de entrada por consola en C Sharp con validación robusta, mensajes amigables y manejo de excepciones. Verás cómo capturar nombre y nota para una evaluación, normalizar datos, convertir a tipos numéricos y controlar try/catch con excepciones específicas como ArgumentException y ArgumentOutOfRangeException.
¿Cómo crear un objeto por consola en C Sharp?
Para construir una evaluación desde la consola, primero se crea el objeto sin inicializar y luego se completan sus propiedades con datos validados. El foco está en dos campos: nombre (string) y nota (float).
¿Qué variables y validaciones iniciales se necesitan?
- Crear el objeto de evaluación sin inicializar.
- Pedir el nombre con Console.ReadLine.
- Validar con string.IsNullOrWhiteSpace para evitar vacío o espacios.
- Decidir si lanzar ArgumentException o mostrar mensajes y terminar el programa.
- Normalizar el nombre con toLower para mantener consistencia.
- Confirmar con un mensaje de éxito.
// Objeto de evaluación sin inicializar var newEval = new Evaluacion(); // Pedir nombre printer.WriteLine("Ingrese el nombre de la evaluación y presione Enter"); printer.PresioneEnter(); var nombre = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nombre)) { // Alternativa sin excepción printer.WriteTitle("El valor nombre no puede ser vacío"); printer.WriteLine("Saliendo del programa."); return; // Alternativa con excepción: // throw new ArgumentException("El valor del nombre no puede ser vacío."); } // Normalizar y asignar newEval.nombre = nombre.ToLower(); printer.WriteLine("El nombre de la evaluación ha sido ingresado correctamente.");
¿Cómo mejorar la experiencia con mensajes del printer?
- Centraliza textos repetidos como "Presione Enter para continuar" en un método Printer.PresioneEnter.
- Usa Printer.WriteTitle y Printer.WriteLine para comunicar errores sin que el programa "reviente".
- Evita mensajes técnicos para el usuario final cuando no aportan valor.
¿Cómo convertir y validar la nota con manejo de excepciones?
La nota se captura como string, se valida vacío y luego se convierte a float. La conversión puede fallar, así que se usa try/catch para controlar errores y dar mensajes claros.
¿Cómo parsear y manejar errores con try catch?
- Capturar notaString con Console.ReadLine.
- Validar vacío con string.IsNullOrWhiteSpace.
- Convertir con float.Parse dentro de try.
- Usar un catch genérico para errores de formato y notificar: "no es un número válido".
- En la demostración, el sistema interpretó coma o punto en la nota al convertir con float.Parse.
printer.WriteLine("Ingrese la nota de la evaluación"); printer.PresioneEnter(); var notaString = Console.ReadLine(); if (string.IsNullOrWhiteSpace(notaString)) { printer.WriteTitle("El valor de la nota no puede ser vacío"); printer.WriteLine("Saliendo del programa."); return; } try { newEval.nota = float.Parse(notaString); // Validación de rango if (newEval.nota < 0 || newEval.nota > 5) { throw new ArgumentOutOfRangeException("La nota debe estar entre cero y cinco."); } printer.WriteLine("La nota de la evaluación ha sido ingresada correctamente."); } catch (ArgumentOutOfRangeException argE) { printer.WriteLine(argE.Message); printer.WriteLine("Saliendo del programa."); } catch (Exception) { printer.WriteLine("El valor de la nota no es un número válido, saliendo de la aplicación."); }
¿Cómo validar el rango permitido de la nota?
- Define el rango válido: de 0 a 5 inclusive.
- Si está fuera, lanza ArgumentOutOfRangeException con un mensaje claro.
- Usa un catch específico para esta excepción y muestra su Message.
¿Por qué el orden de los catch importa en C Sharp?
El manejo de excepciones funciona en "cascada": el sistema evalúa de arriba hacia abajo. Un catch genérico de Exception colocado primero atrapará todo y hará inalcanzables los catch específicos.
¿Qué es la captura en cascada y cómo afecta?
- Coloca primero los catch específicos como ArgumentOutOfRangeException.
- Deja el catch genérico de Exception al final para casos no previstos.
- Si pones el genérico primero, el IDE advertirá que los catch siguientes no se ejecutarán.
¿Te gustaría compartir cómo validas entradas por consola o qué mensajes usas para mejorar la experiencia de usuario?