Principais erros de desenvolvedores C# iniciantes: de A a Z

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

Principais erros de desenvolvedores C# iniciantes: de A a Z

\n\n

A migração para C# e a plataforma .NET é uma jornada empolgante. No entanto, como em qualquer linguagem, os iniciantes frequentemente cometem os mesmos erros. Alguns desses erros levam a bugs difíceis de encontrar, outros à queda de desempenho. Neste artigo, analisaremos os erros mais comuns de desenvolvedores C# iniciantes, desde o uso incorreto de tipos até problemas com assincronicidade. Conhecer essas armadilhas ajudará você a escrever um código mais limpo, seguro e eficiente.

\n\n

1. Ignorar NullReferenceException e falta de verificações

\n\n

Este é, talvez, o erro mais comum que todo iniciante enfrenta. Você chama um método ou propriedade de um objeto que na verdade é null, e o aplicativo trava com NullReferenceException.

\n\n

Problema: O desenvolvedor assume que o método sempre retorna um objeto, ou não verifica o resultado da chamada.

\n\n

Exemplo de código incorreto:

\n
public string GetCustomerName(int id)\n{\n    var customer = _repository.FindById(id);\n    // Se customer == null, a próxima linha irá falhar\n    return customer.FullName.ToUpper();\n}
\n\n

Como corrigir: Use o operador condicional ou o operador ? (null-conditional).

\n
public string GetCustomerName(int id)\n{\n    var customer = _repository.FindById(id);\n    // Chamada segura: se customer for null, retornará null\n    return customer?.FullName?.ToUpper() ?? "Cliente desconhecido";\n}
\n\n

Dica: No C# 8.0 e superior, use Nullable Reference Types. Isso permitirá que o compilador o avise sobre possíveis valores nulos em tempo de compilação.

\n\n

2. Confusão entre value-types e reference-types (ref/out)

\n\n

Muitos iniciantes não entendem a diferença entre passagem por valor e por referência. Isso se aplica especialmente aos modificadores ref e out.

\n\n

Problema: Você pensa que passar um objeto para um método altera a variável original, mas isso nem sempre é verdade. Se você atribuir um novo objeto ao parâmetro, a variável original não será alterada (a menos que use ref).

\n\n

Exemplo:

\n
public void ChangeName(string name)\n{\n    name = "Novo nome"; // Isso NÃO alterará a variável original!\n}\n\nstring myName = "Nome antigo";\nChangeName(myName);\nConsole.WriteLine(myName); // Exibirá: "Nome antigo"
\n\n

Como corrigir: Use ref ou out se realmente precisar alterar a referência.

\n
public void ChangeName(ref string name)\n{\n    name = "Novo nome";\n}\n\nstring myName = "Nome antigo";\nChangeName(ref myName);\nConsole.WriteLine(myName); // Exibirá: "Novo nome"
\n\n

Importante: out é usado quando o método deve obrigatoriamente atribuir um valor ao parâmetro (antes de sair do método). ref é usado quando a variável já foi inicializada antes da chamada.

\n\n

3. Uso incorreto de LINQ (enumerações múltiplas)

\n\n

LINQ é uma ferramenta poderosa, mas pode impactar fortemente o desempenho se você não entender como funcionam as avaliações adiadas (deferred execution).

\n\n

Problema: Chamar .Where() ou .Select() não executa a consulta imediatamente. Cada vez que você itera sobre o resultado (por exemplo, em um loop foreach), a consulta é executada novamente.

\n\n

Exemplo de código incorreto:

\n
var numbers = Enumerable.Range(1, 1000);\nvar filtered = numbers.Where(n => n % 2 == 0);\n\n// Primeira passagem — a consulta é executada\nint count = filtered.Count();\n\n// Segunda passagem — a consulta é executada NOVAMENTE (mais uma vez)\nforeach (var num in filtered)\n{\n    Console.WriteLine(num);\n}
\n\n

Como corrigir: Materia

Blogs

Book Recommendations