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
, StartDate
eEndDate
e substituiu-o por um tipo anônimo e passou-o comodynamic
.