【发布时间】:2015-03-11 00:09:18
【问题描述】:
我在数据库和 WPF C# 应用程序的帮助下自动化了一些任务。其中一项任务是每月报告,查看上个月的活动。我正在使用 DateTime 选择器来选择报告的开始和结束日期,但通常它将是任何月份的第一天和最后一天。在我的视图模型中,我将属性绑定到开始日期时间和结束日期时间,它们默认为上个月的第一天和最后一天。当我选择一个新的开始日期时,我的代码会将其设为所选月份的第一天,然后将结束日期设置为该月的最后一天,如下所示:
private DateTime _d1 = new DateTime(DateTime.Today.Year, DateTime.Today.Month - 1, 1); //First Day of previous month
private DateTime _d2 = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(-1); //Last Day of previous month
public DateTime d1
{
get { return _d1; }
set
{
if (value != _d1)
{
_d1 = new DateTime(value.Year, value.Month, 1);
_d2 = new DateTime(value.Year, value.Month + 1, 1).AddDays(-1);
RaisePropertyChangedEvent("d1");
RaisePropertyChangedEvent("d2");
}
}
}
所以我的问题是:_d1 引用的旧 DateTime(_d2 相同)仍然分配在某个地方。有没有办法让我在分配新的内存块之前取消引用该内存块?我认为垃圾收集可能会这样做,但让事情像那样悬空对我来说似乎很奇怪。有C/C++背景,感觉这肯定不行。
【问题讨论】:
-
否;垃圾收集器为您做所有事情。 (另外,无论如何这是一个值类型)
-
顺便说一句,您不能以这种方式可靠地添加月份,因为
months参数必须是 1 到 12。请改用AddMonths方法。 -
@MattJohnson 谢谢。 . .我现在在我的日期逻辑中也看到了更多的陷阱,很高兴你指出了这一点。