C # 4: динамический и обнуляемый <>
Итак, у меня есть код, который передает этот анонимный объект между методами:
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))
};
Методы, которые получают этот анонимный тип объекта, объявляют его тип какdynamic
:
private static bool IsPromoActive(dynamic promo)
{
return /* check StartDate, EndDate */
}
Однако во время выполнения, еслиStartDate
или жеEndDate
установлены вnew Nullable<DateTime>(DateTime.Parse(...))
, метод, который получает этоdynamic
объект (названныйpromo
) выполняет это:
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'
Что тут происходит? Что я не понимаю оNullable
типы иdynamic
ключевое слово?
Этот код работал нормально, прежде чем я изменил, я удалилstruct
ранее сохраненныеText
, StartDate
, а такжеEndDate
и заменил его анонимным типом и передал его какdynamic
.