No último post, sobre null coalescing, falei sobre variáveis nullable, e prometi escrever um post explicando o que é e para que serve este tipo de variável.
No C#, os value types (int, uint, long, ulong, byte, sbyte, bool, char, double, float e decimal) ao contrário dos reference types não aceitam o valor null, ou seja, não podem ser nulas. Por exemplo, ao declarar um inteiro desta forma int i = null o framework retorna um erro de conversão, dizendo que não pode converter nulo para inteiro. Mas o problema é que muitas vezes este recurso é necessário. Por exemplo, ao ler um campo numérico do banco que é nulo, ou passar um nulo para um parâmetro de método, para este ser desconsiderado, sem a necessidade de uma sobrecarga deste método. Por estes, e outros motivos, existe o nullable.
Portanto, ao declarar um value type como nullable, pode-se atribuir o valor null a esta variável. Podemos declarar um nullable de duas maneiras:
Nullable<T> nomedavariavel;
Ou
T? nomedavariavel;
Nos exemplos acima “T” é um value type. Para testar se a variável possui um valor válido (não nulo) e ler este valor, este tipo possui duas propriedades: Value e HasValue. Ambas são readonly. HasValue indica se uma variável nullabel possui um valor não nulo. Se for true, possui valor. Se for false, é nula. A propriedade Value retorna o valor do nullable type. Para atribuir um valor a uma variável nullable, faz-se normalmente, da forma como se faz com um value type normal: variável = valor. Como disse antes, a propriedade Value é readonly e é usada apenas para recuperar o valor da variável, não para setá-lo.
Para recuperar o valor de um nullable, sem correr o risco de ter uma exceção, verifique se a variável possui valor, e depois leia o valor, desta forma:
if (variavel.HasValue)
int y = variavel.Value
Ou desta forma:
int y = variavel.HasValue ? variavel.Value: -1;
Ou ainda, conforme explicado no artigo anterior, usando o operador “??”:
int y = i ?? -1;
1 comentários:
Valeu Dino, belo post.
Uaurghhhhh!!!!
Postar um comentário