c# – Como Resolver “Object reference not set to an instance of an object”?

Question:

    namespace RepositorioLivrosICC
{

    public class RepositorioLivros
    {
        public static RepositorioLivros instance = null;
        private List<Livro> repositorioLivros;
        private int indice;

        public static RepositorioLivros getInstance()
        {
            if (instance == null)
            {
                instance = new RepositorioLivros();
            }
            return instance;
        }

        private RepositorioLivros()
        {
            this.repositorioLivros = new List<Livro>();
            this.indice = 1;
        }

        public void inserirLivro(Livro l)
        {
            l.setCodigo(indice);
            indice++;
            this.repositorioLivros.Add(l);
        }

        public bool remover(Livro l)
        {
            bool removeu = false;
            foreach (Livro aux in this.repositorioLivros)
            {
                if (aux.getCodigo() == l.getCodigo())
                {
                    this.repositorioLivros.Remove(l);
                    removeu = true;
                }
            }
            return removeu;
        }

        public bool procurar(int index)
        {
            bool achou = false;
            foreach (Livro aux in this.repositorioLivros)
            {
                if (aux.getCodigo() == index)
                {
                    achou = true;
                }
            }
            return achou;
        }

        public string listar()
        {
            string retorno = "";
            foreach (Livro l in this.repositorioLivros)
            {
                retorno += l.ToString();
            }
            return retorno;
        }
    }

    public class Livro : Object
    {

        private string nome;
        private int codigo;
        private Autor autor;

        public Livro(string nome, Autor autor)
        {
            this.setAutor(autor);
            this.setAutor(autor);
        }

        public int getCodigo()
        {
            return this.codigo;
        }

        public void setCodigo(int codigo)
        {
            if (codigo > 0)
            {
                this.codigo = codigo;
            }
            else
            {
                Console.WriteLine("Codigo inválido");
            }
        }

        public void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome do livro inválido");
            }
        }

        public void setAutor(Autor autor)
        {
            if (autor != null)
            {
                this.autor = autor;
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public Autor getAutor()
        {
            return this.autor;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nCodigo Livro: " + this.codigo + "\nNome Livro:" + this.nome + this.autor.ToString();
            return retorno;
        }
    }
    public class Autor : Object
    {
        private string nome;
        private string cpf;

        public Autor(string nome, string cpf)
        {
            this.setCpf(cpf);
            this.setNome(nome);
        }

        private void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome autor inválido");
            }
        }

        public void setCpf(string cpf)
        {
            if (cpf != null)
            {
                this.cpf = cpf;
            }
            else
            {
                Console.WriteLine("Cpf inválido");
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public string getCpf()
        {
            return this.cpf;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nNome Autor: " + this.nome + "\nCpf: " + this.cpf;
            return retorno;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            int opcao = -1;

            try
            {
                RepositorioLivros repositorio = new RepositorioLivros();


                Autor aziz = new Autor("Andre Aziz", "12738172398");
                Autor autor1 = new Autor("Carlos Julian", "1273861237");
                Livro livro1 = new Livro("Arquitetura de computadores", aziz);
                Livro livro2 = new Livro("Metodologia Cientifica", autor1);
                repositorio.inserirLivro(livro1);
                repositorio.inserirLivro(livro2);
                string aux;
                do
                {
                    Console.WriteLine("========== Menu ==========");
                    Console.WriteLine("1 - Inserir Livro ");
                    Console.WriteLine("2 - Remover Livro ");
                    Console.WriteLine("3 - Listar Livros");
                    Console.WriteLine("0 - Sair");
                    Console.WriteLine("==========================");
                    Console.WriteLine("Digite uma opcao: ");
                    aux = Console.ReadLine();
                    opcao = Convert.ToInt32(aux);

                    switch (opcao)
                    {
                        case 1:
                            string nome, cpf, nomeLivro;
                            Console.WriteLine("Digite as informações do autor: ");
                            Console.WriteLine("Nome Autor: ");
                            nome = Console.ReadLine();
                            Console.WriteLine("CPF: ");
                            cpf = Console.ReadLine();
                            Console.WriteLine("Digite as informações do Livro: ");
                            Console.WriteLine("Nome Livro: ");
                            nomeLivro = Console.ReadLine();
                            Autor temp = new Autor(nome, cpf);
                            Livro temp1 = new Livro(nomeLivro, temp);
                            repositorio.inserirLivro(temp1);
                            break;
                        case 2:

                            break;
                        case 3:
                            Console.WriteLine("==== Listar ====");
                            repositorio.listar();
                            break;
                        case 0:

                            break;
                        default:
                            Console.WriteLine("Opção Invalida");
                            break;

                    }
                } while (opcao != 0);
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine(ex.Message);
            }



        }
    }
}

I've tried everything and I can't find the error.

Answer:

I made small changes your error was on the line

 RepositorioLivros repositorio = new RepositorioLivros();

and the right thing in this structure that you are using is

 RepositorioLivros repositorio = RepositorioLivros.getInstance();

Another tip is, C# every class inherits object, so you don't need to explicit this inheritance in the end, object will always be inherited.

Get and sets in c# are used differently than in JAVA and it is debatable why these differences exist but the community usually uses them by default

public string Nome { get; set; }

You can take MVA courses that are very good and still get certified.

using System;
using System.Collections.Generic;

namespace ConsoleTest
{

    class Program
    {
        static void Main(string[] args)
        {
            int opcao = -1;

            try
            {
                RepositorioLivros repositorio = RepositorioLivros.getInstance();


                Autor aziz = new Autor("Andre Aziz", "12738172398");
                Autor autor1 = new Autor("Carlos Julian", "1273861237");
                Livro livro1 = new Livro("Arquitetura de computadores", aziz);
                Livro livro2 = new Livro("Metodologia Cientifica", autor1);
                repositorio.inserirLivro(livro1);
                repositorio.inserirLivro(livro2);
                string aux;
                do
                {
                    Console.WriteLine("========== Menu ==========");
                    Console.WriteLine("1 - Inserir Livro ");
                    Console.WriteLine("2 - Remover Livro ");
                    Console.WriteLine("3 - Listar Livros");
                    Console.WriteLine("0 - Sair");
                    Console.WriteLine("==========================");
                    Console.WriteLine("Digite uma opcao: ");
                    aux = Console.ReadLine();
                    opcao = Convert.ToInt32(aux);

                    switch (opcao)
                    {
                        case 1:
                            string nome, cpf, nomeLivro;
                            Console.WriteLine("Digite as informações do autor: ");
                            Console.WriteLine("Nome Autor: ");
                            nome = Console.ReadLine();
                            Console.WriteLine("CPF: ");
                            cpf = Console.ReadLine();
                            Console.WriteLine("Digite as informações do Livro: ");
                            Console.WriteLine("Nome Livro: ");
                            nomeLivro = Console.ReadLine();
                            Autor temp = new Autor(nome, cpf);
                            Livro temp1 = new Livro(nomeLivro, temp);
                            repositorio.inserirLivro(temp1);
                            break;
                        case 2:
                            Console.WriteLine("Digite o index que quer remover:");
                            var indx = -1;
                            int.TryParse(Console.ReadLine(), out indx);
                            var tem = repositorio.procurar(indx);
                            if(tem != null)
                            repositorio.remover(tem);                                                     
                            break;
                        case 3:
                            Console.WriteLine("==== Listar ====");
                            Console.WriteLine(repositorio.listar());
                            break;
                        case 0:

                            break;
                        default:
                            Console.WriteLine("Opção Invalida");
                            break;

                    }
                } while (opcao != 0);
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine(ex.Message);
            }



        }

    public class RepositorioLivros
    {
        public static RepositorioLivros instance = null;
        private List<Livro> repositorioLivros;
        private int indice;

        public static RepositorioLivros getInstance()
        {
            if (instance == null)
            {
                instance = new RepositorioLivros();
            }
            return instance;
        }

        private RepositorioLivros()
        {
            this.repositorioLivros = new List<Livro>();
            this.indice = 1;
        }

        public void inserirLivro(Livro l)
        {
            l.setCodigo(indice);
            indice++;
            this.repositorioLivros.Add(l);
        }

        public bool remover(Livro l)
        {
            return repositorioLivros.Remove(l);
        }

        public Livro procurar(int index)
        {            
            foreach (Livro aux in this.repositorioLivros)
            {
                if (aux.getCodigo() == index)
                {
                    return aux;
                }
            }
            return null;
        }

        public string listar()
        {
            string retorno = "";
            foreach (Livro l in this.repositorioLivros)
            {
                retorno += l.ToString()+ "\n";
            }
            return retorno;
        }
    }

    public class Livro : Object
    {

        private string nome;
        private int codigo;
        private Autor autor;

        public Livro(string nome, Autor autor)
        {
            this.setAutor(autor);
            this.setAutor(autor);
        }

        public int getCodigo()
        {
            return this.codigo;
        }

        public void setCodigo(int codigo)
        {
            if (codigo > 0)
            {
                this.codigo = codigo;
            }
            else
            {
                Console.WriteLine("Codigo inválido");
            }
        }

        public void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome do livro inválido");
            }
        }

        public void setAutor(Autor autor)
        {
            if (autor != null)
            {
                this.autor = autor;
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public Autor getAutor()
        {
            return this.autor;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nCodigo Livro: " + this.codigo + "\nNome Livro:" + this.nome + this.autor.ToString();
            return retorno;
        }
    }
    public class Autor : Object
    {
        private string nome;
        private string cpf;

        public Autor(string nome, string cpf)
        {
            this.setCpf(cpf);
            this.setNome(nome);
        }

        private void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome autor inválido");
            }
        }

        public void setCpf(string cpf)
        {
            if (cpf != null)
            {
                this.cpf = cpf;
            }
            else
            {
                Console.WriteLine("Cpf inválido");
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public string getCpf()
        {
            return this.cpf;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nNome Autor: " + this.nome + "\nCpf: " + this.cpf;
            return retorno;
        }

    }

    }
}
Scroll to Top
AllEscort