Nullable Types é um recurso do C# que nos permite atribuir o valor null a um tipo de dado que, por padrão, não aceita valores nulos: os tipos primitivos.

Esse recurso é útil quando precisamos realizar operações em banco de dados e desejamos armazenar um valor nulo em um campo que, posteriormente, receberá um valor de tipo primitivo, como int, float, bool, etc.

Utilizando nullable types

Para fazer a conversão de um tipo em um Nullable Type, basta adicionarmos um ponto de interrogação (?) logo após a declaração do tipo.

int? x = null;

Com esse código, atribuímos o valor null à variável x, de tipo int. Para verificarmos se a variável x recebeu algum valor, podemos utilizar uma estrutura condicional que testa se o seu valor é diferente de null, conforme o código abaixo:

if (x != null)
{
    // x possui um valor inteiro
}
else
{
    // x possui um valor nulo
}

Ou podemos simplificar esse código com o uso de um operador ternário:

  Console.WriteLine("O valor de x é " + ((x != null) ? "um inteiro" : "nulo"));
  

Exemplo prático

Para demonstrar esse recurso na prática, criamos uma tabela Clientes com as colunas IdCliente, Nome e NumeroConta. Neste exemplo, suponha que a coluna NumeroConta permite a atribuição de valores nulos para que eles sejam preenchidos posteriormente.

No código abaixo, criamos uma variável do tipo string e uma do tipo int?, que recebe null e, logo após, solicitamos a inserção desses dados no banco:

  string nome = "João";
  int? numeroConta = null;
  ClienteRepositorio repositorio = new ClienteRepositorio();
  repositorio.Inserir(nome, numeroConta);
  

Após a execução, teríamos uma tabela conforme a Figura 1, com a coluna NumeroConta com o valor null:

coluna NumeroConta
Figura 1. Coluna NumeroConta
Nota: Para gravação no banco de dados é necessário que o Nullable Type seja tratado na classe de persistência. Caso ele tenha valor nulo, será convertido para o tipo nulo do banco de dados em uso.