Tipos de valores anuláveis
int? e a struct Nullable.
Tipos de valores anuláveis é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Por que tipos de valor anuláveis?
Tipos de valor como int, bool e DateTime sempre contêm um valor. Um int assume 0 por padrão, nunca «nenhum valor».
Às vezes, você precisa representar dados ausentes, como um campo de pesquisa sem resposta ou uma coluna vazia do banco de dados. Tipos de valor anuláveis permitem que um tipo de valor também contenha null.
Declarando com int?
Adicione um ? depois de um tipo de valor para torná-lo anulável. int? pode conter qualquer número inteiro ou null.
Essa é a forma mais comum de escrever tipos de valor anuláveis no código C# cotidiano.
int? age = null;
int count = 5;
age = count;
System.Console.WriteLine(age);Nullable<T> nos bastidores
A sintaxe ? é uma abreviação. int? é exatamente o mesmo tipo que Nullable<int>.
Nullable<T> é uma estrutura que envolve um tipo de valor e adiciona um sinalizador que acompanha se há um valor presente.
Nullable<int> a = 10;
int? b = 10;
System.Console.WriteLine(a == b);HasValue e valor
Todo anulável expõe duas propriedades. HasValue é true quando há um valor presente, e Value retorna o valor subjacente.
Ler Value quando HasValue é false lança uma InvalidOperationException, portanto verifique primeiro.
int? score = 42;
if (score.HasValue)
{
System.Console.WriteLine(score.Value);
}Um exemplo completo
Aqui está um programa completo. Ele atribui um valor, verifica HasValue e imprime o resultado.
Execute-o para ver como um anulável se comporta quando realmente contém dados.
using System;
class Program
{
static void Main()
{
int? temperature = 21;
if (temperature.HasValue)
Console.WriteLine("Temp: " + temperature.Value);
else
Console.WriteLine("No reading");
}
}Quando ele é nulo
Atribuir null faz HasValue retornar false. O ramo else então é executado.
Esse padrão permite lidar com segurança com leituras opcionais sem causar uma falha.
using System;
class Program
{
static void Main()
{
int? temperature = null;
if (temperature.HasValue)
Console.WriteLine(temperature.Value);
else
Console.WriteLine("No reading");
}
}GetValueOrDefault
GetValueOrDefault() retorna o valor se ele estiver presente; caso contrário, retorna o valor padrão desse tipo (como 0 para int).
Também é possível fornecer seu próprio valor alternativo: GetValueOrDefault(100) retorna 100 quando o valor é nulo.
int? quantity = null;
int result = quantity.GetValueOrDefault(100);
System.Console.WriteLine(result);Conversão implícita para anulável
Um int comum é convertido automaticamente em int?, porque todo valor simples também é um valor anulável válido.
O inverso não é automático: passar de int? para int exige uma conversão explícita ou um valor alternativo, pois o valor anulável pode ser nulo.
int plain = 7;
int? wrapped = plain;
int back = (int)wrapped;
System.Console.WriteLine(back);Tipo anulável com outros tipos de valor
Qualquer tipo de valor funciona: bool?, double?, DateTime? e até estruturas personalizadas.
Um bool? tem três estados: true, false e null, o que é útil para perguntas de sim ou não sem resposta.
bool? agreed = null;
double? price = 9.99;
System.Console.WriteLine(agreed.HasValue);
System.Console.WriteLine(price.Value);Tipos de referência já são anuláveis
Classes como string e matrizes já podem ser null, portanto não precisam do contêiner Nullable<T>.
O ? em tipos de referência (como string?) tem um significado diferente: é uma anotação de referência anulável, não a estrutura Nullable<T>.
Comparando valores anuláveis
As comparações funcionam, mas lembre-se de que null tem um comportamento especial. Dois valores nulos são iguais, e qualquer comparação ordenada que envolva null retorna false.
Assim, null < 5 é false, e null > 5 também é false.
int? x = null;
System.Console.WriteLine(x < 5);
System.Console.WriteLine(x == null);Verificação rápida
Teste sua compreensão dos tipos de valor anuláveis.
Recapitulação
Os tipos de valor anuláveis permitem que os tipos de valor também armazenem null. Escreva-os como int?, que é equivalente a Nullable<int>.
Use HasValue para verificar, Value para ler (somente quando houver um valor) e GetValueOrDefault() para obter um valor alternativo com segurança. Os tipos de referência já são anuláveis por conta própria.
Perguntas Frequentes
A aula “Tipos de valores anuláveis” é grátis?
Sim — o texto completo de “Tipos de valores anuláveis” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Tipos de valores anuláveis”?
int? e a struct Nullable. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Tipos de valores anuláveis”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Tipos de valores anuláveis
- Operador condicional de nulo
- Operadores de coalescência de nulo
- Protegendo contra nulos