none
Erro: O índice estava fora dos limites da matriz. RRS feed

  • Pergunta

  • Não entendo o que está acontecendo para dar esse erro, provavelmente entendi errado como ocorre a execução do programa, agradeço a ajuda.

    Código:

    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace aula10_OOP.Classes
    {
        public class Cliente
        {
            public string nome;
            public string telefone;
            public string cpf;

            public void Gravar()
            {
                //Ainda sera feito
            }

            private static string caminhoBaseClientes()
            {
                return ConfigurationManager.AppSettings["BaseDeClientes"];
            }

            public static List<Cliente> LerClientes()
            {
                var clientes = new List<Cliente>();
                if (File.Exists(caminhoBaseClientes()))
                {
                    using (StreamReader arquivo = File.OpenText(caminhoBaseClientes()))
                    {
                        string linha;
                        int i = 0;
                        while ((linha = arquivo.ReadLine()) != null)
                        {
                            i++;
                            if (i == 1) continue;
                            var clienteArquivo = linha.Split(';');

                            var cliente = new Cliente();
                            cliente.nome = clienteArquivo[0];
                            cliente.telefone = clienteArquivo[1];
                            cliente.cpf = clienteArquivo[2];

                            clientes.Add(cliente);
                        }
                    }
                }
                return clientes;
            }
        }
    }


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

    namespace aula10_OOP
    {
        class Program
        {
            static void Main(string[] args)
            {
                var clientes = Cliente.LerClientes();
          
               /* var cliente = new Cliente();
                cliente.nome = "Sheyla";
                cliente.telefone = "11111111";
                cliente.cpf = "22222222222";

                cliente.Gravar();*/
            }
        }
    }
    segunda-feira, 22 de janeiro de 2018 21:41

Respostas

  • Provavelmente o erro está ocorrendo nas linhas citadas anteriormente por Felipe Duarte. Nestes casos é sempre bom vc verificar o tamanho do array antes mesmo de pegar o valor.

    No exemplo que dei usei ternário, mas pode se usar "if" tbm, da forma que achar mais conveniente.

    Como ficaria:

    cliente.nome = clienteArquivo.Length >= 1 ? clienteArquivo[0] : "";
    cliente.telefone = clienteArquivo.Length >= 2 ? clienteArquivo[1] : "";
    cliente.cpf = clienteArquivo.Length >= 3 ? clienteArquivo[2] : "";


    • Editado EricFerreira sexta-feira, 26 de janeiro de 2018 01:00
    • Marcado como Resposta Lou_ quarta-feira, 31 de janeiro de 2018 13:26
    sexta-feira, 26 de janeiro de 2018 00:59

Todas as Respostas

  • Você não disse em qual linha o erro está acontecendo.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    segunda-feira, 22 de janeiro de 2018 23:27
  • O erro provavelmente está em uma dessas linhas:

    cliente.nome = clienteArquivo[0];
    cliente.telefone = clienteArquivo[1];
    cliente.cpf = clienteArquivo[2];


    Verifique se sua variável clienteArquivo está sendo preenchida com o métdo Split.

    Ela deve estar em branco, por isso está ocorrendo o erro de indice.

    Qualquer dúvida, estou a disposição.

    att.

    Felipe


    terça-feira, 23 de janeiro de 2018 16:23
  • Provavelmente o erro está ocorrendo nas linhas citadas anteriormente por Felipe Duarte. Nestes casos é sempre bom vc verificar o tamanho do array antes mesmo de pegar o valor.

    No exemplo que dei usei ternário, mas pode se usar "if" tbm, da forma que achar mais conveniente.

    Como ficaria:

    cliente.nome = clienteArquivo.Length >= 1 ? clienteArquivo[0] : "";
    cliente.telefone = clienteArquivo.Length >= 2 ? clienteArquivo[1] : "";
    cliente.cpf = clienteArquivo.Length >= 3 ? clienteArquivo[2] : "";


    • Editado EricFerreira sexta-feira, 26 de janeiro de 2018 01:00
    • Marcado como Resposta Lou_ quarta-feira, 31 de janeiro de 2018 13:26
    sexta-feira, 26 de janeiro de 2018 00:59