C # 4: Dinâmico e Anulável <>

Então, eu tenho um código que passa esse objeto anônimo entre métodos:

var promo = new
{
    Text = promo.Value,
    StartDate = (startDate == null) ?
        new Nullable<DateTime>() : 
        new Nullable<DateTime>(DateTime.Parse(startDate.Value)),
    EndDate = (endDate == null) ?
        new Nullable<DateTime>() : 
        new Nullable<DateTime>(DateTime.Parse(endDate.Value))
};

Os métodos que recebem esse tipo de objeto anônimo declaram seu tipo comodynamic:

private static bool IsPromoActive(dynamic promo)
{
    return /* check StartDate, EndDate */
}

No tempo de execução, no entanto, seStartDate ouEndDate estão definidos comonew Nullable<DateTime>(DateTime.Parse(...)), um método que recebe essedynamic objeto (nomeadopromo) realiza o seguinte:

if (promo.StartDate.HasValue && promo.StartDate > DateTime.Today ||
    promo.EndDate.HasValue && promo.EndDate < DateTime.Today)
{
    return;
}

Isso lança uma exceção:

Server Error in '/' Application.
'System.DateTime' does not contain a definition for 'HasValue' 

Oque esta acontecendo aqui? O que eu não entendo sobreNullable tipos e osdynamic palavra-chave?

Esse código funcionou bem antes de eu alterar, removi ostruct que armazenado anteriormenteText, StartDateeEndDate e substituiu-o por um tipo anônimo e passou-o comodynamic.

questionAnswers(1)

yourAnswerToTheQuestion