No .net 2.0, há um novo tipo anulável, que pode ser usado para atribuir valores nulos a tipos de valores básicos, como
int? k = 3;//Um tipo de valor anulável (referido como tipo nulo)
int m = null; // erro
int?j = null;//Sucesso No exemplo acima, podemos ver que um tipo de valor anulável pode ser definido após o tipo de valor. Em C#, um sinal ? você pode fazer isso
Dim dtmVarName As Nullable(Of DateTime)
Dim intVarName As Nullable(Of Integer)
Dim bVarName As Nullable(Of Boolean)
Deve-se observar que o tipo nulo não é um novo tipo de dados .NET.
Na verdade, o tipo nulo é uma classe genérica System.Nullable<T> definida na biblioteca .NET, onde T é um tipo de valor substituível.
int? k = 3; também pode ser escrito como System.Nullable<int> k = 3;
As operações são implementadas por meio da sobrecarga do operador desta classe.
Você pode usar hasvalue para determinar se o tipo vazio recebeu um valor
if (dtmVarName.HasValue)
{
//...do Something
}.
http://www.cnblogs.com/jackyrong/archive/2006/08/26/486796.html