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
oEndDate
están configurados paranew Nullable<DateTime>(DateTime.Parse(...))
, un método que recibe estodynamic
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
tipos y eldynamic
¿palabra clave?
Este código funcionó bien antes de cambiar, eliminé elstruct
que previamente almacenadoText
, StartDate
yEndDate
y lo reemplazó con un tipo anónimo y lo pasó comodynamic
.