Instanciar clases para crear objetos mediante arrays en C#

Estoy con un programa para consola, tengo una clase Estudiante con el atributo tipo int Matricula.
Tengo 2 constructores, uno con parámetros definidos y otro para que los reciba, al querer crear un array de objetos, cómo hago para que se almacene el valor del atributo Matricula en el constructor que recibe parámetros?
Mi código es el siguiente:

Clase Estudiante

class Estudiante {
     protected int Matricula;
     }
// Constructor por defecto
public Estudiante() {
     Matricula: 1234567;
     }
//Constructor que recibe parámetros
public Estudiante(int matricula) {
     this.Matricula = matricula;
     }
public virtual string MostrarDatos() {
     return "Matricula: " + this.Matricula;
     }

Main

Estudiante() arrayAlumnos = new Estudiante(5);

     //Creando Objetos
     for (int i = 0; i < 5; i++) {
          arrayAlumnos(i) = new Estudiante();
          Console.WriteLine("Matrícula: ");
          int matricula = int.Parse(Console.ReadLine()); //En esta línea está mi duda
          }

     //Impresión de datos
     for (int i = 0; i < 5; i++) {
          Console.WriteLine("-------------Estudiante #" + (i + 1) + "-------------n");
          Console.WriteLine(arrayAlumnos(i).MostrarDatos());
          }

Creí y traté de llamar el atributo del constructor de esta forma:

Console.WriteLine("Matrícula: ");
int matricula = int.Parse(Console.ReadLine());

Pero en VSC matricula me aparece como variable local sin uso y al querer imprimir me arroja lo que tengo en el constructor por defecto y no lo que tecleé. ¿Cuál es la forma correcta de hacerlo?