Utilizando Tipos Nulos em c# (Nullable Types)

Em alguns casos precisamos trabalhar com tipos nulos, mas por padrão nem todos os tipos de variáveis aceitam, porem em c# é muito simples criarmos variáveis que possam assumir valores nulos.

Nullable

Qualquer tipo pode passar a ser nullable , por exemplo uma variável do tipo int por padrão não pode receber null, para resolver isso basta adicionar o operador ? logo depois do tipo desejado.
Declararmos da seguinte forma:

 

?View Code CSHARP
1
2
3
4
5
6
7
int? numero;
numero = null;
 
//ou
 
Nullable<int> numero2;
numero2 = null;

Com isso criamos uma variável do tipo int nullable.

Utilizo bastante variáveis nullables  por exemplo quando quero passar um parametro bool? ativo em uma funçao onde quando o valor  for True trarei todos os registros ativos, False todos os Inativos e Null para trazer todos os ativos e inativos.

Operador ??

O operador ?? apesar de pouco conhecido é muito útil, com ele podemos verificar de forma rápida e elegante se uma variável possui valor nulo;

Exemplo:

?View Code CSHARP
1
2
3
4
5
int? numero = null;
int numero2 = numero??99;
 
string mensagem = null;
string mensagem2 = mensagem??"Mensagem Nula";

Com isso caso o valor da variável que  antecede o operador ?? for nulo, será atribuido o valor que está posterior ao operador ??, caso contrario será atribuido o valor da variável em questão.

Ele trabalha de forma bem parecida a um if ternário:

?View Code CSHARP
1
2
int? numero = null;
int numero2 = numero == null ? 99 : numero;

Esse operador pode ser muito útil por exemplo em Getters para evitar retorno de um objeto não instanciado:

?View Code CSHARP
1
2
3
4
5
6
private IList<Empresa> empresas;
public IList<Empresa> Empresas
{
    get { return empresas = empresas ?? new List<Empresa>(); }
    set { empresas = value; }
}

Ou quando precisamos reistanciar algum objeto caso esteja nulo.

?View Code CSHARP
1
2
repositorio = repositorio ?? new Repositorio();
//Somente será reinstanciada caso sejá nulo.

Até a próxima.
[]s

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *