Módulo 01 — Fundamentos da Plataforma e da Linguagem
Nullable e nullable reference types
iniciante 22 min de leitura·Atualizado · .NET 9
Resumo
nullsignifica "sem valor". Value types usamint?para poder ser nulos; reference types ganharam os nullable reference types (NRT), que avisam em compilação quando você pode estar acessando algo nulo.
1. Objetivos de Aprendizagem#
- Usar nullable value types (
int?) e seus operadores. - Entender nullable reference types (NRT) e seus avisos.
- Aplicar
?.,??e??=para lidar com null com segurança.
2. Pré-requisitos#
- Struct vs class (tópico 4.1).
3. Conceito#
- Nullable value types:
int?é açúcar paraNullable<int>— permite que um value type sejanull(ex.: um campo opcional do banco). - Nullable reference types (NRT): com
<Nullable>enable</Nullable>, o compilador passa a distinguirstring(não deve ser null) destring?(pode ser null) e avisa quando você desreferencia algo possivelmente nulo. É proteção em tempo de compilação contra oNullReferenceException.
Operadores essenciais:
?.— navegação segura: retornanullem vez de estourar.??— valor padrão se for null.??=— atribui só se estiver null.!— null-forgiving: "eu garanto que não é null" (use com cautela).
4. Mão na Massa#
4.1. Setup#
Shell
dotnet new console -n Catalog.Nullable
cd Catalog.Nullable
Confirme no .csproj: <Nullable>enable</Nullable>.
4.2. Implementação Passo a Passo#
- Nullable value type:
C#
int? desconto = null;
int aplicado = desconto ?? 0; // 0 se null
if (desconto.HasValue)
Console.WriteLine(desconto.Value);
- NRT e operadores:
C#
string? nome = ObterNome(); // pode ser null
int tamanho = nome?.Length ?? 0; // seguro
nome ??= "sem nome"; // define padrão se null
Console.WriteLine(nome.Length); // agora garantido não-nulo
static string? ObterNome() => null;
4.3. Executando#
Shell
dotnet run
5. Exemplo Completo#
C#
string? entrada = null;
var nome = entrada?.Trim() ?? "anônimo";
Console.WriteLine($"Olá, {nome}"); // "Olá, anônimo"
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
Manter Nullable habilitado e tratar os avisos | Silenciar avisos com ! em todo lugar |
Usar ?? para valores padrão | Acessar propriedades sem checar null antes |
Declarar string? quando o null é legítimo | Fingir que algo nunca é null quando pode ser |
Atençãoo operador
!(null-forgiving) não verifica nada em runtime — apenas silencia o compilador. Se você errar, oNullReferenceExceptionvolta.
7. Segurança e Produção#
- NRT reduz drasticamente uma das exceções mais comuns em produção (
NullReferenceException). Trate os avisos como parte da qualidade do código.
8. Exercícios#
- Fácil: use
??para dar um padrão a umstring?. - Médio: encadeie
?.para acessar propriedade de um objeto possivelmente nulo. - Desafio: habilite
TreatWarningsAsErrorse resolva todos os avisos de nullability de um projeto pequeno.
9. Resumo#
int? permite value types nulos; NRT avisa em compilação sobre acessos possivelmente nulos. Use ?., ?? e ??= para tratar null com segurança e evite abusar do !.
10. Próximos Passos#
Encerramos os fundamentos de tipos. A seguir, orientação a objetos.
11. Referências#
- Microsoft Learn — Nullable value types
- Microsoft Learn — Nullable reference types
- Microsoft Learn — Operadores ?. e ??
Terminou esta aula?
Marque como concluída para acompanhar seu progresso.