Traverse attributes of an object that is in a list in C#

Asked

Viewed 456 times

-1

Good night,

I need help please.

I am writing a program that reads a file. For each line of the file an object is created. Each object is stored in a list.

My intention is, when loading the initial form of the program, the Textbox should be filled with the object data in the first index of the list.

The problem is I’m getting error: The index was outside the range. It must be non-negative is smaller than the collection size. Parameter name: index.

File that is read:

34543;PRIMEIRA PESSOA;230778;CASADO;BANCARIO
23543;SEGUNDA PESSOA;12051985;CASADO;ADMINISTRADOR DE EMPRESAS
36116;TERCEIRA PESSOA;04081954;DIVORCIADO;APOSENTADO/PENSIONISTA
52455;QUARTA PESSOA;16111987;CASADO;ARTESAO

Arquivos Cidadao.Cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MeuPrimeiroLeitorDeArquivo
{
    public class Cidadao
    {
        public int numeroRegistro { get; set; }
        public string nomeCompleto { get; set; }
        public string dataNascimento { get; set; }
        public string estadoCivil { get; set; }
        public string profissao { get; set; }

        public Cidadao (int nrRegistro, string nmCompleto, string dtNasc, string estCivil, string prfs)
        {
            this.numeroRegistro = nrRegistro;
            this.nomeCompleto = nmCompleto;
            this.dataNascimento = dtNasc;
            this.estadoCivil = estCivil;
            this.profissao = prfs;
        }
    }
}

Form1.Cs archive:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace MeuPrimeiroLeitorDeArquivo
{
    public partial class FormPrincipal : Form
    {
        private List<Cidadao> cidadaos = new List<Cidadao>();

        public FormPrincipal()
        {
            InitializeComponent();
        }

        private void FormPrincipal_Load(object sender, EventArgs e)
        {
            List<Cidadao> cidadaos = new List<Cidadao>();

            string arqTxt = @"C:\eclipse\teste1.txt";

            if (File.Exists(arqTxt))
            {
                try
                {
                    using (StreamReader sr = new StreamReader(arqTxt))
                    {
                        String linha;
                        while((linha = sr.ReadLine()) != null)
                        {
                            int formNumeroRegistro;
                            string formNomeCompleto;
                            string formDataNascimento;
                            string formEstadoCivil;
                            string formProfissao;

                            string[] linhaExplodida = linha.Split(';');

                            formNumeroRegistro = Convert.ToInt32(linhaExplodida[0]);
                            formNomeCompleto = linhaExplodida[1];
                            formDataNascimento = linhaExplodida[2];
                            formEstadoCivil = linhaExplodida[3];
                            formProfissao = linhaExplodida[4];

                            Cidadao cidadao = new Cidadao(formNumeroRegistro, formNomeCompleto, formDataNascimento, formEstadoCivil, formProfissao);

                            cidadaos.Add(cidadao);

                        }
                    }


                    if (cidadaos.Count >= 0)
                    {
                        Cidadao pessoa1 = this.cidadaos[0];
                        textNumeroRegistro.Text = Convert.ToString(pessoa1.numeroRegistro);
                        textNomeCompleto.Text = pessoa1.nomeCompleto;
                        textEstadoCivil.Text = pessoa1.estadoCivil;
                        textProfissao.Text = pessoa1.profissao;
                    }

                } catch (Exception ex)
                {
                    MessageBox.Show("Erro: " + ex.Message);
                }
            } else
            {
                MessageBox.Show("Arquivo " + arqTxt + " não localizado");
            }
        }
    }
}

Bug photo:

inserir a descrição da imagem aqui

The error explodes when you try to run this line: Personal citizen1 = this.cidadaos[0].

Someone can/can help?

1 answer

1

Change if (cidadaos.Count >= 0) for if (cidadaos.Count > 0).

You’re getting into the if even if there is nothing in the list, which generates the error.

Browser other questions tagged

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