Como nem tudo na vida são flores, isso tem algumas desvantagens. Uma delas é que não temos mais as propriedades e métodos do struct DateTime (como AddDays, Month, Year, entre outros) diretamente. Veja a imagem abaixo, demonstrando o code-insight em uma variável DateTime? :
Duas propriedades importantes deste novo tipo, como em qualquer outro tipo "nulável", são as propriedades Value e a HasValue. A primeira é a que conterá o tipo original em questão: Se for DateTime, ela será do tipo DateTime, se for int, será int.
A propriedade HasValue, do tipo bool, indica se a variável não é nula. Isto é importantíssimo no momento de fazermos ou uma atribuição para um tipo original, quanto para fazer comparações, no nosso caso, demonstrarei como um if a mais no código exemplo abaixo:
No código acima, devemos tomar alguns cuidados: Null é um ESTADO, e não um VALOR. Portanto, comparar as duas variáveis é um tiro no pé. No segundo if, quem é menor e quem é maior?
Esta pergunta não tem resposta! Null não é nem menor, nem igual, nem maior a um valor. A única comparação que será verdadeira será a da diferença. Não vai gerar exception no código acima, mas ele está ilógico. Já o exemplo abaixo vai dar um erro de execução, mas vai ser compilado: