Analisando o projeto de um terceiro me deparei com um código que, ao meu ver, está errado (o exemplo não segue o padrão de nomenclatura encontrado lá):
public void DefinirDataDePagamento(DateTime? data)
{
if(data == null)
throw new ArgumentNullException(“data”);
//executa a tarefa
}
Pelo que aparenta, a data que é passada como parametro para o método DefinirDataDePagamento é obrigatória e, caso seja nula, uma exceção do tipo ArgumentNullException é disparada. Se essa regra existe (não permitir que data seja nula), então porque o parametro data é criado como sendo um Nullable<DateTime> ao invés de apenas DateTime? Se fosse definido como DateTime, obrigatoriamente, o desenvolvedor deverá passar uma data (seja DateTime.MinValue, DateTime.MaxValue, DateTime.Now ou um DateTime customizado) ao utilizar o método.