Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

HasheSet || Dúvida no código de comboBox

Tentei Implementar o HasheSet no código CaixaEletronico. só que qunado eu o implemento, uma parte do código do comboBox da erro:

Error CS0021: Cannot apply indexing with [] to an expression of type 'HashSet'

no caso é nessa linha onde acontece o erro

Conta contaselecionada = contas[indiceSelecionado];

HashSet<Conta> contas;
        TotalizadorDeContas SaldoTotal = new TotalizadorDeContas();
        TotalizadorDeTributos Tributavel = new TotalizadorDeTributos();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            contas = new HashSet<Conta>();

            Conta c1 = new ContaCorrente();
            c1.Titular = new Cliente();
            c1.Titular.Nome = "Alexander";
            c1.Titular.Emancipado = true;
            c1.Titular.Idade = 18;
            c1.Titular.CPF = "123456789 - 00";
            c1.Numero = 1;
            contas.Add(c1);

            Conta c2 = new ContaPoupanca();
            c2.Titular = new Cliente();
            c2.Titular.Nome = "Bassani";
            c2.Titular.Emancipado = true;
            c2.Titular.Idade = 18;
            c2.Titular.CPF = "987654321 - 00";
            c2.Numero = 2;
            contas.Add(c2);

            Conta c3 = new ContaInvestimento();
            c3.Titular = new Cliente();
            c3.Titular.Nome = "Amaral";
            c3.Titular.Emancipado = true;
            c3.Titular.Idade = 18;
            c3.Titular.CPF = "147896325 - 00";
            c3.Numero = 3;
            contas.Add(c3);



            foreach (Conta conta in contas)
            {
                if (conta != null)
                {
                    comboContas.Items.Add(conta.Titular.Nome);
                    comboTransfere.Items.Add(conta.Titular.Nome);
                }
            }

            textSaldoTotal.Text = Convert.ToString(SaldoTotal.valor);
        }

        public void MostrarConta()
        {
            foreach(Conta conta in contas)
            {
                SaldoTotal.AdicionaSaldo(conta);
            }
            textSaldoTotal.Text = Convert.ToString(SaldoTotal.valor);
            foreach (Conta conta in contas)
            {
                SaldoTotal.RetiraSaldo(conta);
            }

            int indiceSelecionado = comboContas.SelectedIndex;
            Conta contaselecionada = contas[indiceSelecionado];

            textNome.Text = contaselecionada.Titular.Nome;
            textCPF.Text = contaselecionada.Titular.CPF;
            textNumero.Text = Convert.ToString(contaselecionada.Numero);
            textSaldo.Text = Convert.ToString(contaselecionada.Saldo);
            textRendimento.Text = Convert.ToString(contaselecionada.RendimentoAnual());
        }
2 respostas

Oi Alexander, tudo bom?

Esse erro ocorre pois agora não estamos mais usando a lista de contas como um Array e sim um objeto, no seu caso um HashSet. Ao longo dos exercicios algumas implementações são utilizadas, entre elas HashSet, List e Dictonary.

Sendo assim, nossa implementação precisaria mudar um pouco pois linhas que acessam a posição de um array vão deixar de funcionar mesmo. Exemplo:

            Conta contaselecionada = contas[indiceSelecionado];

Nos arquivos dessa aula tem uma implementação com List pronta, caso você queira algo para se basear =)

Qualquer dificuldade, compartilha aqui com a gente!

Abraço e bons estudos.

solução!

Olá, Alexander

O HashSet não permite acesso através do índice, mas você pode converter o HashSet para um Array (com ToArray()) e em seguida acessar seus elementos pelo índice, por exemplo:

Conta contaselecionada = contas.ToArray()[indiceSelecionado];