10

我有一个可以为 null 或 Datetime 的 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
}
4

4 回答 4

42

您需要通过“值”属性:

lastInvite.Value.AddDays(7)

请注意,如果 DateTime 实际上为空,这将引发异常。幸运的是,您可以使用另一个属性“HasValue”来对此进行测试。

if (lastInvite.HasValue){ /* code */ }
于 2013-08-29T18:56:12.723 回答
13

您应该考虑尝试使您的逻辑更具可读性:

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;
}
于 2013-08-29T19:17:23.767 回答
11

有多种方法可以解决此错误。

  1. 使用Convert.ToDateTime()处理空日期时间值的方法。

    Convert.ToDateTime(lastInvite).AddDays(7);

  2. 使用Value属性

    lastInvite.Value.AddDays(7)

  3. 使用GetValueOrDefault()方法

    lastInvite.GetValueOrDefault().AddDays(7)

于 2014-12-23T08:00:45.947 回答
0

如果您查看type的文档Nullable<T>,您会发现它只有几个成员。如果容器有值,该Value成员将带您进入T内部。不会从它包装Nullable<T>的类型中借用任何成员。Nullable<T>T

于 2013-08-29T18:59:35.153 回答