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 inicializarvar newEval =newEvaluacion();// Pedir nombreprinter.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 asignarnewEval.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 rangoif(newEval.nota <0|| newEval.nota >5){thrownewArgumentOutOfRangeException("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?