Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

StackOverflowException ao utilizar o get

Ao tentar utilizar o get da seguinte maneira:

   static void Main(string[] args)
    {
        var sala = new Sala();
        /*sala.SetReserva("D01", new ClienteCinema("João da Silva"));
          sala.SetReserva("D02", new ClienteCinema("Maria de Souza"));*/
        sala["D01"] = new ClienteCinema("João da Silva");
        sala["D02"] = new ClienteCinema("Maria de Souza");
        sala.ImprimirReservas();
        Console.WriteLine(sala["D02"]);
    }

    class ClienteCinema
    {
        public string Nome { get; set; }

        public ClienteCinema(string nome)
        {
            Nome = nome;
        }

        public override string ToString()
        {
            return Nome;
        }
    }

    class Sala
    {
        private readonly IDictionary<string, ClienteCinema> reservas = new Dictionary<string, ClienteCinema>();

        /*public ClienteCinema GetReserva(string codigoAssento)
        {
            return reservas[codigoAssento];
        }

        public void SetReserva(string codigoAssento, ClienteCinema cliente)
        {
            reservas[codigoAssento] = cliente;
        }*/


        public ClienteCinema this[string codigoAssento]
        {
            get
            {
                return this[codigoAssento];
            }

            set
            {
                reservas[codigoAssento] = value;
            }
        }

        public void ImprimirReservas()
        {
            Console.WriteLine("Assentos Reservados");
            Console.WriteLine("====================");
            foreach(var r in reservas)
                Console.WriteLine($"{r.Key} - {r.Value}");
        }
}

Na execução acontece o erro StackOverflowException ao utilizar o get. Por que não posso utilizar o get dessa maneira? E qual a maneira correta de utilizá-lo?

1 resposta
solução!

Fala Felipe, tudo bem?

Você está recebendo um StackOverflowException pois o indexador está acessando ele mesmo através do this[codigoAssento], o correto seria usar desta forma:

public ClienteCinema this[string codigoAssento]
{
    get
    {
        return reservas[codigoAssento];
    }

    set
    {
        reservas[codigoAssento] = value;
    }
}

Do mesmo jeito que no set você está atribuindo um valor no dicionário reservas, no get você deve obter um valor do mesmo dicionário.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software