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?