Desenvolvimento - C#
Tipos Nulos (Nullable Types) no C#
Os tipos nulos são especialmente úteis em operações envolvendo bancos de dados e outras situações que podem apresentar valores nulos em pontos onde são esperados valores tipados.
por Carlos de MattosIntrodução
Os tipos nulos são especialmente úteis em operações envolvendo bancos de dados e outras situações que podem apresentar valores nulos em pontos onde são esperados valores tipados. Existem várias formas para o desenvolvedor contornar essas situações, neste artigo vamos explorar os operadores de tipos nulos disponíveis no C#.
Operadores de Tipos Nulos
No C# temos operadores que facilitam a declaração de variáveis e criação de expressões contendo valores nulos. Esses operadores são pouco conhecidos pelos programadores que estão iniciando nesta linguagem. Abaixo estão alguns exemplos que ilustram a utilização dos operadores (?) e (??) utilizados na manipulação de Tipos Nulos no C#.
// x pode ser um Int32 ou Nulo
int? x = null;
// y pode ser True/False ou Nulo
bool? y = null;
// z pode ser um Double ou Nulo
double? z = null;
A propriedade HasValue
Como mostra o exemplo acima, o operador (?) permite a atribuição de valores nulos para variáveis tipadas. Para testar o conteúdo de uma variável de Tipo Nulo o desenvolvedor pode utilizar a propriedade HasValue(). Esta propriedade retorna False se o conteúdo da variável for Nulo e True caso tenha um valor atribuído.
// x pode ser um Int32 ou Nulo
int? x = null;
if (x.HasValue)
// x contém um valor inteiro válido
else
// x contém valor nulo
A propriedade Value
A propriedade Value retorna o valor armazenado na variável ou uma exceção do tipo InvalidOperationException caso a variável contenha valor nulo.
// x pode ser um Int32 ou Nulo
int? x = null;
// y é um valor Int32
int y = 0;
try
{
y = x.Value;
}
catch (InvalidOperationException )
{
MessageBox.Show("Operação inválida!");
}
O método GetValueOrDefault()
Outro método no qual o desenvolvedor pode apoiar-se é o GetValueOrDefault(). Este método retorna o valor armazenado na variável de tipo nulo ou o valor padrão para o tipo de dados da variável caso esta contenha valor nulo. Por exemplo, para uma variável declarada como bool? x = null o método GetValueOrDefault() retornará False (valor padrão para o tipo de dado boolean). Veja o código abaixo:
// x pode ser um Int32 ou Nulo
int? x = null;
// y receberá valor 0 (zero) que é o valor padrão para o tipo Int32
int y = x.GetValueOrDefault();
O Operador (??)
Outro operador muito útil neste cenário é o operador ??. Com ele é possível determinar um valor que será à variável quando a variável testada contiver valor nulo. Veja o exemplo abaixo:
// variável de tipo nulo
bool? b = null;
// variável de tipo Bool
bool c = false;
// o operador ?? atribuirá valor True pois b é nulo
c = b ?? true;
// variável de tipo nulo
int? j = null;
// variável de tipo Int32
int k = 0;
// a variável k receberá valor 42 pois j é nulo
k = j ?? 42;
Conclusão
Existem diversos cenários onde precisamos manipular valores nulos. Os operadores mostrados acima, podem auxiliar o desenvolvedor na construção de expressões que manipulam valores nulos.