Object reference not set to an instance of a C #

-1

Good afternoon, guys. I'm having a hard time solving a coding problem. When I perform an INSERT , it displays an object reference error not defined in the leitora.Tecnico.IdTecnico line. 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; }
    }
}
    
asked by anonymous 19.12.2018 / 15:18

1 answer

5

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

Initialize it before using

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 best to initialize the instance of Tecnico whenever initializing an instance of Leitora .

For this, you would either need to change the default value of the property or add the initialization in 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 only one of two types, it may be interesting to read the posts below.

19.12.2018 / 15:34