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 Mattos



Introduçã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.

Carlos de Mattos

Carlos de Mattos - É profissional certificado pela Microsoft desde 1998. Atua como desenvolvedor de soluções customizadas para o mercado corporativo há mais de 10 anos. Foi premiado pela Microsoft como MVP em 2003 e 2004. Tem diversos artigos publicados nas revistas FórumAccess e MSDN Magazine, nos Websites MSDN Online Brasil, Portal DevMedia/MSDN e Linha de Código. Carlos também atuou durante 5 anos junto à Comunidade Acadêmica na região de Sorocaba/SP ministrando palestras e treinamentos junto às Universidades e Colégios Técnicos. Atualmente está em Sorocaba/SP, na WD5 Solutions dedicando-se à implementação de soluções baseadas em tecnologia Microsoft.NET.