我有一个DateTime变量,可以是null或Datetime。我认为可以为空的DateTime类型可以工作,但我收到一个错误,告诉我说
Nullable<DateTime>
没有AddDays的定义
。有什么办法可以解决这个错误吗?
DateTime? lastInvite = (DateTime?)Session["LastInviteSent"];
if ((string)Session["InviteNudgeFlag"] == "False" && ((lastInvite == null && DateTime.Now >= AcctCreation.AddDays(7)) || (int)Session["InviteCount"] > 0 && DateTime.Now >= lastInvite.AddDays(7)))
{
// Non important code here
}
答案 0 :(得分:34)
您需要浏览“价值”属性:
lastInvite.Value.AddDays(7)
请注意,如果DateTime实际为null,则会抛出异常。幸运的是,还有另一个属性可以用来测试它,“HasValue”。
if (lastInvite.HasValue){ /* code */ }
答案 1 :(得分:6)
有多种方法可以解决此错误。
使用处理空日期时间值的Convert.ToDateTime()
方法。
Convert.ToDateTime(lastInvite).AddDays(7);
使用Value
属性
lastInvite.Value.AddDays(7)
使用GetValueOrDefault()
方法
lastInvite.GetValueOrDefault()。AddDays(7)
答案 2 :(得分:5)
您应该考虑尝试让您的逻辑更具可读性:
var inviteNudgeFlag = bool.Parse((string) Session["InviteNudgeFlag"]);
if(!inviteNudgeFlag)
{
return;
}
var lastInvite = (DateTime?) Session["LastInviteSent"];
var inviteCount = (int) Session["InviteCount"];
var numOfDays = 7;
var now = DateTime.Now;
var weekSinceLastInvite = lastInvite.HasValue
? now >= lastInvite.Value.AddDays(numOfDays)
: now >= AcctCreation.AddDays(numOfDays);
var hasInvites = !lastInvite.HasValue || inviteCount > 0;
var canInvite = hasInvites && weekSinceLastInvite;
if(!canInvite)
{
return;
}
答案 3 :(得分:0)
如果你看the documentation for the Nullable<T>
type,你会发现它只有几个成员。如果Value
容器具有值,T
成员将在Nullable<T>
内部获取。 Nullable<T>
不会借用它所包含的T
类型的任何成员。