Undefined object reference for an instance of an object c#

Asked

Viewed 40 times

-1

Good afternoon guys. I’m having a really hard time solving a coding problem. When I perform a INSERT, displays an object reference error not defined in the row leitora.Tecnico.IdTecnico. Could someone tell me what’s going on?

private void bt_gravar_Click(object sender, EventArgs e)
{
    if (tb_numserie.Text == string.Empty || tb_idcategoria.Text == string.Empty || tb_idtecnico.Text == string.Empty)
    {
        MessageBox.Show("Preencha todos os campos obrigatórios", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
        return;
    }

    if (acaoNaTelaSelecionada == AcaoNaTela.Inserir)
    {
        Leitora leitora = new Leitora();

        leitora.IdLeitora = tb_numserie.Text;
        leitora.DataEntrega = dp_data.Value;
        leitora.Tecnico.IdTecnico = Convert.ToInt32(tb_idtecnico.Text);
        leitora.CategoriaLeitora.IdCategoria = Convert.ToInt32(tb_idcategoria.Text);
        leitora.StatusLeitora.IdStatus = Convert.ToInt32(tb_idstatus.Text);

        LeitoraNegocio leitoraNegocio = new LeitoraNegocio();

        string Retorno = leitoraNegocio.Inserir(leitora);

        try
        {
            int IdLeitora = Convert.ToInt32(Retorno);

            MessageBox.Show("Leitora inserida com sucesso. Código: " + IdLeitora.ToString());

            this.DialogResult = DialogResult.Yes;
        }
        catch
        {
            MessageBox.Show("Não foi possível inserir. Detalhes: " + Retorno, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.DialogResult = DialogResult.No;
        }
    }
}

namespace ObjetoTransferencia
{
    public class Leitora
    {
        public string IdLeitora { get; set; }    
        public DateTime DataEntrega { get; set; }    
        public Tecnico Tecnico { get; set; }    
        public CategoriaLeitora CategoriaLeitora { get; set; }    
        public StatusLeitora StatusLeitora { get; set; }
    }
}
  • From what I can see, Reader.Tecnico seems to be null.

  • Where does the error occur? I did not find the section where you initialize the Technical object, inside Reader.

  • The error occurs in the fourth line after the IF - reader.Tecnico.Idtecnico = Convert.Toint32(tb_idtecnico.Text);

1 answer

5

The estate Tecnico of Leitora is null (default value).

Initialize it before use

Leitora leitora = new Leitora();

leitora.IdLeitora = tb_numserie.Text;
leitora.DataEntrega = dp_data.Value;

leitora.Tecnico = new Tecnico();    

leitora.Tecnico.IdTecnico = Convert.ToInt32(tb_idtecnico.Text);

Depending on the need, it may be better to initialize the instance of Tecnico whenever initialize an instance of Leitora.

To do this, you would need to change the default value of the property or add the boot to the constructor.

public class Leitora
{
    public string IdLeitora { get; set; }    
    public DateTime DataEntrega { get; set; }    
    public Tecnico Tecnico { get; set; } = new Tecnico(); 
    // (^) Definindo valor padrão
    public CategoriaLeitora CategoriaLeitora { get; set; }    
    public StatusLeitora StatusLeitora { get; set; }

    public Leitora()
    {
        Tecnico = new Tecnico();
        // Inicialização no construtor
    }
}

Choose just one of the two types, it might be interesting if you read the posts below.

  • Actually I had not booted it. Now it started falling into my Exception

  • @Cool Gabriel. Just for the record: if the answer solved the question problem, you can mark it as correct using the V on the direct side.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.