C # 4: Dinámico y Anulable <>

Así que tengo un código que pasa alrededor de este 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))
};

Los métodos que reciben este tipo de objeto anónimo declaran su tipo comodynamic:

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

En tiempo de ejecución, sin embargo, siStartDate&nbsp;oEndDate&nbsp;están configurados paranew Nullable<DateTime>(DateTime.Parse(...)), un método que recibe estodynamic&nbsp;objeto (llamadopromo) realiza esto:

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

Lanza una excepción:

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

¿Que está pasando aqui? ¿Qué no entiendo sobreNullable&nbsp;tipos y eldynamic&nbsp;¿palabra clave?

Este código funcionó bien antes de cambiar, eliminé elstruct&nbsp;que previamente almacenadoText, StartDateyEndDate&nbsp;y lo reemplazó con un tipo anónimo y lo pasó comodynamic.