Registro com vetor c#

Estou apreendendo programação C#, e estou começando fazer exercícios em Registro. Estou com no código no modulo valida int n. Alguém poderia explicar o motivo do erro.

class Program
{
struct regfunc
{
public int regisfunc;
public string nome;
public string cargo;
public double salario;

    }

   
    static void valida(int ref n, int max)
    {
        while (n < 1 || n > max)
        {
        Console.WriteLine("Quantidades de funcionarios:");
        n = int.Parse(Console.ReadLine());
        }
    }
    static void Cadastro( regfunc []  vfunc, int n)
      {
        for (int i = 0; i < n; i++)
        { 
        Console.WriteLine("***CADASTRAR FUNCIONARIO***:");

        Console.WriteLine("Digite Numero Registro Funcionario :");
        vfunc[i].regisfunc = int.Parse(Console.ReadLine());

        Console.WriteLine("Digite o Nome:");
        vfunc[i].nome = Console.ReadLine();

        Console.WriteLine("Digite o Cargo:");
        vfunc[i].cargo = Console.ReadLine();

        Console.WriteLine("Digite o Salario :");
        vfunc[i].salario = double.Parse(Console.ReadLine());
    }
}

    static void imprimirtodos( regfunc[] vfunc, int n)
    {
       for (int i = 0; i < n; i++)
        {
            Console.WriteLine("\n********TODOS CADASTROS********");
            Console.WriteLine("Registro Funcionario:" + vfunc[i].regisfunc);
            Console.WriteLine("Nome:" + vfunc[i].nome);
            Console.WriteLine("Cargo:" + vfunc[i].cargo);
            Console.WriteLine("Salario :" + vfunc[i].salario);
        }
    }

    static void aci5000(regfunc[] vfunc, int n)
    {
       for (int i = 0; i < n; i++)
        {
            if (vfunc[i].salario > 5000)
            {
                Console.WriteLine("\n********SALARIO ACIMA de R$5.000,00********");
                Console.WriteLine("Nome:" + vfunc[i].nome);
                Console.WriteLine("Cargo:" + vfunc[i].nome);
                Console.WriteLine("Salario :" + vfunc[i].salario);
            }
        }
     }

    static void Main(string[] args)


    {
         
        int op;
        
        
        valida (ref n,20);


        do
        {

         Console.Write("****Menus****");
            Console.Write("\n1 - Cadastrar");
            Console.Write("\n2 - Imprimir todos");
            Console.Write("\n3 - Salario acima de R$5.000,00");
            Console.Write("\n4 - Sair");

            Console.WriteLine("\n Digite a opção");
            op = int.Parse(Console.ReadLine());
            while ((op < 1) || (op > 4))
            {
                Console.WriteLine("Opção invalidade, escolher outra operação de 1 a 4 conforme menu:");
                op = int.Parse(Console.ReadLine());

            }
         
            regfunc[] vfunc = new regfunc[1];
          
            switch (op)
            {
                                   
            case 1:
                    Cadastro(vfunc, n);
                    break;
            case 2:
                    imprimirtodos(vfunc, n);
                    break;
            case 3:
                    aci5000(vfunc, n);
                    break;
                   
            }
        }
        while (op != 4);
    }
}

}