Introdução
C# é uma linguagem de programação poderosa e elegante que forma a base do ecossistema .NET. No entanto, como qualquer ferramenta, requer uma abordagem cuidadosa. Desenvolvedores iniciantes frequentemente cometem os mesmos erros, que podem levar a bugs difíceis de encontrar, desempenho reduzido e perda de tempo em depuração.
Neste artigo, vamos detalhar os erros mais comuns de iniciantes em C# — desde o gerenciamento incorreto de memória até as nuances complicadas da programação assíncrona. Você aprenderá como evitá-los e escrever um código mais limpo, confiável e eficiente. Este material será útil tanto para estudantes quanto para aqueles que estão começando sua jornada no desenvolvimento .NET.
1. Ignorar Valores null e NullReferenceException
Talvez o erro mais comum que todo desenvolvedor C# encontra seja o NullReferenceException. Ele ocorre quando você tenta chamar um método ou acessar uma propriedade de um objeto que é null.
O Problema
Iniciantes frequentemente esquecem de verificar os valores de retorno de métodos para null, especialmente ao trabalhar com bancos de dados, coleções ou APIs externas.
Exemplo de Código Incorreto
public string GetUserName(int userId){ var user = _userRepository.FindById(userId); // Erro! Se user == null, uma NullReferenceException será lançada return user.Name;}Como Corrigir
- Use o operador condicional nulo (
?.) — ele acessa membros do objeto com segurança, retornandonullse o objeto fornull. - Use o operador de coalescência nula (
??) — ele permite especificar um valor padrão. - Verifique explicitamente se é nulo usando
if (user != null).
Exemplo de Código Correto
public string GetUserName(int userId){ var user = _userRepository.FindById(userId); // Chamada segura + valor padrão return user?.Name ?? "Unknown User";}2. Uso Incorreto de Strings (Concatenação de Strings em Loops)
Strings em C# são imutáveis. Cada vez que você "adiciona" strings usando +, um novo objeto é criado na memória. Em loops, isso leva a uma degradação catastrófica de desempenho.
O Problema
Usar o operador += para concatenação de strings dentro de loops for ou foreach.
Exemplo de Código Incorreto
string result = "";for (int i = 0; i < 10000; i++){ // Cada iteração cria uma nova string e copia a antiga result += i.ToString() + ", ";}Como Corrigir
- Use
StringBuilder— esta é uma classe mutável otimizada para construir strings. - Para casos simples, use
string.Join()ou interpolação de strings ($"...").
Exemplo de Código Correto
var sb = new StringBuilder();for (int i = 0; i < 10000; i++){ sb.Append(i); sb.Append(", ");}string result = sb.ToString();3. Confusão com Tipos de Valor e Tipos de Referência (Boxing/Unboxing)
Entender a diferença entre tipos de valor (struct, int, bool) e tipos de referência (class, string, array) é um conceito fundamental em C#. Um dos erros mais custosos é o boxing e unboxing implícito, que ocorre ao converter um tipo de valor para object ou uma interface.
O Problema
Iniciantes frequentemente usam coleções como ArrayList ou Hashtable (que trabalham com object) em vez de coleções genéricas (List<T>, Dictionary<TKey, TValue>). Isso leva a p