Nullable DateTimes和AddDays()扩展名

时间:2013-08-29 18:54:08

标签: c#

我有一个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
}

4 个答案:

答案 0 :(得分:34)

您需要浏览“价值”属性:

lastInvite.Value.AddDays(7)

请注意,如果DateTime实际为null,则会抛出异常。幸运的是,还有另一个属性可以用来测试它,“HasValue”。

if (lastInvite.HasValue){ /* code */ }

答案 1 :(得分:6)

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

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

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

  2. 使用Value属性

    lastInvite.Value.AddDays(7)

  3. 使用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类型的任何成员。