NullReferenceException em C#: como encontrar e corrigir o erro

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é NullReferenceException e como lidar com ele? Guia completo para desenvolvedores C#

\n\n

Você já viu aquela mensagem assustadora: "Object reference not set to an instance of an object"? Se você programa em C# há pelo menos uma semana, provavelmente já se deparou com ela. Este é o NullReferenceException — o erro mais popular no mundo .NET. Ele assusta iniciantes, mas desenvolvedores experientes sabem: é apenas a forma do programa dizer "Não sei com o que trabalhar, me dê um objeto".

\n\n

Neste artigo, vamos analisar por que o NullReferenceException ocorre, como encontrá-lo e, principalmente, como preveni-lo. Você aprenderá a escrever um código mais seguro e gastar menos tempo em depuração.

\n\n

O que é NullReferenceException em palavras simples?

\n\n

Imagine que você pediu uma pizza, mas o entregador chegou de mãos vazias. Você pergunta: "Onde está minha pizza?", e ele responde: "Não sei, não tenho nada". É mais ou menos assim que funciona o NullReferenceException. Você tenta chamar um método ou acessar uma propriedade de uma variável que é igual a null. O compilador não vê isso, mas durante a execução o programa falha.

\n\n

Em C#, qualquer variável de referência (classe, interface, string, array) pode ser null. Se você tentar fazer algo com essa variável, receberá uma exceção.

\n\n

Os cenários mais comuns de ocorrência do NullReferenceException

\n\n

Vamos ver exemplos reais de código que levam a esse erro.

\n\n

1. Variável não inicializada

\n
string name;\nConsole.WriteLine(name.Length); // NullReferenceException
\n

A variável name foi declarada, mas não inicializada. Por padrão, ela é igual a null.

\n\n

2. Método retorna null

\n
public string GetUserName(int id)\n{\n    // se o usuário não for encontrado, retorna null\n    return null;\n}\n\nvar user = GetUserName(42);\nConsole.WriteLine(user.ToUpper()); // NullReferenceException
\n\n

3. Acesso a um elemento de coleção que não existe

\n
var list = new List<string> { "A", "B" };\nvar item = list[5]; // ArgumentOutOfRangeException, mas se o elemento fosse null...\n// Agora um exemplo com Dictionary:\nvar dict = new Dictionary<int, string>();\nvar value = dict[1]; // KeyNotFoundException, mas se a chave existisse e o valor fosse null?
\n\n

4. Encadeamento de chamadas

\n
class Address { public string City { get; set; } }\nclass Person { public Address Address { get; set; } }\n\nvar person = new Person();\nConsole.WriteLine(person.Address.City); // NullReferenceException, porque Address == null
\n\n

Como encontrar NullReferenceException: depuração para iniciantes

\n\n

Quando o programa falha, o Visual Studio ou Rider mostrarão a pilha de chamadas. Lá estará a linha onde o erro ocorreu. Mas muitas vezes o problema é mais profundo. Veja o algoritmo de busca:

\n\n
    \n
  • Observe a linha com o erro. Qual variável está sendo usada? Ela com certeza não é null?
  • \n
  • Verifique de onde veio o valor. Se for resultado de um método — veja se ele pode retornar null.
  • \n
  • Use pontos de interrupção. Coloque um breakpoint antes da linha com erro e verifique os valores de todas as variáveis.
  • \n
  • Adicione pontos de interrupção condicionais. No Visual Studio, você pode colocar um breakpoint com condição: myVar == null.
  • \n
\n\n

Como corrigir NullReferenceException: 5 maneiras comprovadas

\n\n

A boa notícia: o NullReferenceException quase sempre pode ser prevenido. Aqui está o que você pode fazer.

\n\n

1. Verificação de null (o bom e velho if)

\n
if (name != null)\n{\n    Console.WriteLine(name.Length);\n}\nelse\n{\n    Console.WriteLine("Nome não definido");\n}
\n

Isso funciona, mas torna o código verboso se houver muitas verificações

Blogs

Book Recommendations