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

Erro de referência

Meu código dá NullReferenceException, não sei o porquê:

    public partial class AprendendoComboBox : Form
    {
        Conta[] contas;
        public AprendendoComboBox()
        {
            InitializeComponent();
        }

        private void AprendendoComboBox_Load(object sender, EventArgs e)
        {
            Conta[] contas = new Conta[2];
            contas[0] = new Conta();
            contas[1] = new Conta();

            contas[0].Titular = "Eu";
            contas[0].Numero = 1;
            contas[0].Deposita(500.00);

            contas[1].Titular = "Irmão";
            contas[1].Numero = 2;
            contas[1].Deposita(600.00);

            foreach(Conta conta in contas)
            {
                comboBoxContas.Items.Add(conta.Titular);
            }

        }

        private void comboBoxContas_SelectedIndexChanged(object sender, EventArgs e)
        {
            int itemSelecionado = comboBoxContas.SelectedIndex;
            Conta contaSelecionada = contas[itemSelecionado];

            textoTitular.Text = contaSelecionada.Titular;
            textoNumero.Text = Convert.ToString(contaSelecionada.Numero);
            textoSaldo.Text = Convert.ToString(contaSelecionada.Saldo);
        }
    }

Dá erro no: Conta contaSelecionada = contas[itemSelecionado];

Alguém pode me explicar?

2 respostas
solução!

Fala Eduardo, tudo bem ?

Perceba que você cria uma váriável contas - Conta[] contas = new Conta[2]; - dentro do método que faz o load. E no método selectedItemChanged você tenta acessar a variável contas.

O que ocorre é que a variável que guarda o array contas que foi devidamente inicializado e populado é local no método de load, seu escopo não permite a utilização da sua referência fora deste método. Tudo que se cria dentro de um bloco se usa dentro desse mesmo bloco.

No método selectedItemChanged a referência que está tentando acessar é na verdade aquela criado no escopo da classe.

public partial class AprendendoComboBox : Form
{
    Conta[] contas;
    //resto do código
}

Como ela não foi inicializada, seu conteúdo é definido como null. O que causa uma NullReferenceException quando o acesso a uma posição é feito - Conta contaSelecionada = contas[itemSelecionado];

Caso queria usar o mesmo array em toda a classe apenas reutilize no método load a varíavel ja definida no escopo da classe. Assim toda e qualquer alteração será refletido para todo método dentro desta classe.

private void AprendendoComboBox_Load(object sender, EventArgs e)
{
    contas = new Conta[2]; //uso da variavel existente
    contas[0] = new Conta();
    contas[1] = new Conta();
    // código omitido
}

Creio que isso já deva resolver. Abraço!

Valeu Rafael, obrigado :D

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