Es posible escribir C# más claro, compacto y seguro cuando entendemos cómo inicializar arreglos, asignarlos a propiedades y manejar null sin errores. Aquí verás cómo refactorizar código paso a paso, crear un método para imprimir cursos y aplicar atajos como using static y el operador de interrogación para mejorar la legibilidad.
¿Cómo inicializar arreglos en C# de forma limpia?
Un código compacto debe favorecer la legibilidad. No siempre lo más corto se entiende mejor. La idea es equilibrar claridad y brevedad.
¿Qué formas de inicialización mejoran la legibilidad?
Declarar y poblar el arreglo en una sola expresión.
Evitar dispersar variables que no se usan.
Mantener una estructura consistente para leerlo fácil.
Ejemplos equivalentes:
// Especificando tamaño y elementosauto cursos =newCurso[3]{ curso101, curso2, curso3 };// Omite el tamaño si ya pasas los elementos (el "3" sobra)var cursos =newCurso[]{ curso101, curso2, curso3 };// Tipo explícito y sin "new" redundanteCurso[] cursos ={ curso101, curso2, curso3 };
¿Por qué evitar redundancia al declarar tamaño?
Si ya agregas 3 elementos, no necesitas indicar [3] explícitamente.
Reducir ruido visual ayuda a mantener el código claro.
¿Cuándo usar var vs tipo explícito?
var es válido cuando el tipo es evidente por la derecha.
Si prefieres claridad explícita, usa Curso[].
¿Cómo asignar arreglos a propiedades y refactorizar la impresión?
Una vez creado el arreglo, puedes asignarlo a la escuela y encapsular la impresión en un método reusable.
¿Cómo imprimir cursos de una escuela con un método?
Extrae la lógica en un método con un nombre claro.
Agrega un título para dar contexto.
voidImprimirCursosEscuela(Escuela escuela){ Console.WriteLine("===================="); Console.WriteLine("Cursos de la escuela"); Console.WriteLine("====================");foreach(var curso in escuela.Cursos){ Console.WriteLine(curso);}}
Con using static System.Console; puedes escribir menos.
Evita repetir Console. en cada línea.
usingstaticSystem.Console;voidImprimirCursosEscuela(Escuela escuela){WriteLine("====================");WriteLine("Cursos de la escuela");WriteLine("====================");foreach(var curso in escuela.Cursos){WriteLine(curso);}}
¿Cómo reducir código repetitivo en WriteLine?
Reemplaza Console.WriteLine por WriteLine tras el using static.
Menos ruido, misma intención. Más legible.
¿Cómo manejar null con seguridad y código compacto?
Los errores por NullReference ocurren cuando iteras o accedes a propiedades sin inicializarlas. Diferencia entre null y arreglo vacío.
¿Qué diferencia hay entre null y arreglo vacío?
null: no hay referencia. Iterar rompe el programa.
new Curso[0]: arreglo vacío. Iterar no imprime nada, pero no falla.
escuela.Cursos =null;// peligro: iterar lanza excepciónescuela.Cursos =newCurso[0];// seguro: foreach no imprime elementos
¿Cómo protegerse con if, operadores ==, != y cortocircuito?
Verifica escuela != null antes de acceder a sus propiedades.
Usa && para aprovechar el cortocircuito: si la primera condición falla, no evalúa la segunda.
if(escuela !=null&& escuela.Cursos !=null){foreach(var curso in escuela.Cursos){WriteLine(curso);}}
¿Cómo simplificar con el operador de interrogación?
El operador ?. evita acceder a miembros cuando la referencia es null.
Úsalo para accesos seguros a propiedades encadenadas.
// Acceso seguro a la propiedad (no evalúa Cursos si escuela es null)var cursos = escuela?.Cursos;// Si necesitas iterar con seguridad, combínalo con coalescenciaforeach(var curso in(escuela?.Cursos)?? Array.Empty<Curso>()){WriteLine(curso);}
Ideas clave:
Inicializa arreglos de forma compacta, sin redundancias.
Extrae métodos para responsabilidades claras (imprimir cursos).
Reduce ruido con using static para WriteLine.
Controla null con if, && (cortocircuito) y ?..
¿Te gustaría ver variantes con filtros, LINQ o validaciones adicionales? Cuéntame en qué parte quieres profundizar y qué error te encuentras al implementar.
Inicialización de arreglos y control de null en C#
Con Ctrl + d pueden seleccionar palabras iguales en diferentes lineas. Se posicionan en la palabra que desean seleccionar y presionan Ctrl + d y se van seleccionando las palabras iguales que va encontrando el editor.
Es muy distinto tener un arreglo sin posiciones a tener un arreglo nulo
arreglo = null → arreglo nulo
arreglo = new arreglo → arreglo sin posiciones
la diferencia es que el arreglo sin posiciones ya está inicializado, “existe” dentro del flujo de mi programa, mientras que el arreglo nulo no.
Corto circuito de expresión de evaluaciones
Cuando se tienen dos condiciones por validar en una instrucción if usando la expresión **and ** el programa evaluará en orden las condiciones y en caso de que la primera sea falsa ya no evaluará la segunda y se saltara el bloque de codigo.
en caso de que se usará un **or **si la primera condición verdadera ya no evalúa la segunda entrará al bloque de codigo.
La lógica de lo que hace el profesor es que hay un objeto escuela y un arreglo con cursos, pero cuando hayan varias escuelas y varios objetos con cursos, será un programa muy difícil de entender.
Entonces lo mejor es que cada escuela tenga los cursos almacenados adentro de su objeto Escuela.
Gracias, después de varios videos donde a mi parecer se iba por encima y sin profundizar lo importante, ya veo ahora algunas cosas nuevas de .net que no había usado antes.
Normalmente un método estática lo crearás cuando no necesitas que sea necesaria la creación de una instancia de la clase para poder usarlo. Si no que puedas usarlo directamente, ya que cuando son estáticos pertenecen directamente a la clase y no a la instancia, por lo que el método siempre será el mismo para todos los objetos creados.
Como indica Luis, un metodo estatico lo puedes acceder sin necesidad de crear una instancia de clase, por lo que es muy util cuando tienes funciones recurrentes en tu aplicacion, es decir, metodos que vas a llamar varias veces en distintas partes de tu codigo, cosas como por ejemplo hacer el calculo de determinada operacion (calcular una nota, sacar un promedio,etc).
En caso de que alguno no lo sepa visual code nos permite acceder rápidamente a los elementos del mismo nombre con [Ctrl ] + [D ] sobre la palabra o lo seleccionado
Hola Jose
quiere decir que tienes una instancia de una clase / objeto llamada escuelas y que estas accediendo a la Propiedad 'Curso' de esta instancia/objeto.
Recuerda que cuando manipulas un objeto si usas '()' parentesis al final estas llamando a uno de sus metodos, si no los usas esta llamando a una de sus propiedades.