Existem algumas situações onde precisamos estabelecer que uma variável pode ser nula. Isso acontece com muita frequência quando utilizando Modelos Objeto-Relacional, onde uma “cópia” da estrutura das tabelas da base de dados é feita dentro do modelo gerado no Visual Studio em forma de classes. Declarar variáveis como anuláveis é extremamente simples, e pode ser feito assim:
// C# - Pode ser assim System.Nullable<decimal> decimalAnulavel = null; System.Nullable<int> inteiroAnulavel = null; System.Nullable<bool> booleanAnulavel = null;
// C# - Ou assim decimal? decimalAnulavel = null; int? inteiroAnulavel = null; bool? booleanAnulavel = null;
' VB.NET - Existe uma única maneira Dim decimalAnulavel As Nullable(Of Decimal) = Nothing Dim inteiroAnulavel As Nullable(Of Integer) = Nothing Dim booleanAnulavel As Nullable(Of Boolean) = Nothing
Como exemplo, uma variável bool anulável pode receber True, False e Null.
Ao declarar uma variável como anulável, são habilitadas duas novas propriedades:
- HasValue: determina se a variável anulável possue valor.
- Value: contém o valor não nulo da variável
Essas duas propriedades pode ser usadas em conjunto, como o código a seguir demonstra.
// C# if (decimalAnulavel.HasValue) Console.WriteLine(decimalAnulavel.Value.ToString()); else Console.WriteLine("Valor nulo");
' VB.NET If (decimalAnulavel.HasValue) Then Console.WriteLine(decimalAnulavel.Value.ToString) Else Console.WriteLine("Valor Nulo") End If
O Operador ?? do C#
O operador ?? facilita a manipulação de tipos anuláveis. Com ele podemos informar um valor fixo caso a variável seja nula.
// C# Console.WriteLine((decimalAnulavel ?? decimal.Zero).ToString());
No VB.NET é bem parecido, mas não existe o operador ??, então usa-se o próprio If.
' VB.NET Console.WriteLine((If(decimalAnulavel, Decimal.Zero)).ToString())
O Operador ?: do C#
O operador ?: funciona como um If, com a sintaxe (condicao ? true : false).
// C# Console.WriteLine((decimalAnulavel.HasValue ? decimalAnulavel.Value.ToString() : "Valor nulo"));
No VB.NET é bem parecido, mas não existe o operador ?:, então usa-se o próprio If.
' VB.NET Console.WriteLine((If(decimalAnulavel.HasValue, _ decimalAnulavel.Value.ToString(), _ "Valor nulo")))
Saiba mais:
- Nullable Types
- Operador ??
- Operador ?:
- Operadores do C#
- Nullable Types in VB.Net: Basic Introduction
Obrigado.
Deixe um comentário