C # 4: Dynamic and Nullable <>

Итак, у меня есть код, который передает этот анонимный объект между методами:

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))
};

Методы, которые получают этот тип анонимного объекта, объявляют его тип как динамический :

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

Однако во время выполнения, если StartDate или EndDate установлены на new Nullable (DateTime.Parse (...)) , метод, который получает этот динамический объект (с именем промо ), выполняет следующее:

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

Он выдает исключение:

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

Что здесь происходит? Что не надо t Я понимаю о Nullable типах и ключевом слове dynamic ?

Этот код работал нормально до того, как я изменил Я удалил структуру , которая ранее хранила Text , StartDate и EndDate и заменил его анонимным типом и передал как динамический .

33
задан JustWorldFallacy 16 September 2010 в 16:37
поделиться