0

我有两个文本框和一个按钮,两个文本框都附有日历。我想将第一个文本框和第二个文本框之间的日期存储在列表中,我在单击按钮时调用以下方法。

private void CollectDates()
    {
        DateTime StartDate = Convert.ToDateTime(txtFromDate.Text);
        DateTime EndDate = Convert.ToDateTime(txtTillDate.Text);
        List<DateTime> datelist = new List<DateTime>();
        for (StartDate = Convert.ToDateTime(txtFromDate.Text); StartDate < Convert.ToDateTime(txtTillDate.Text); StartDate.AddDays(1))
        {
            datelist.Add(StartDate);
        }
    }

但是在列表中存储第一个日期后出现错误:引发了“System.OutOfMemoryException”类型的异常。我认为我的循环无休止地运行,任何帮助将不胜感激。

4

5 回答 5

5

DateTime.AddDays()不会更改您必须分配其返回值的日期时间。喜欢

StartDate = StartDate.AddDays(1)
于 2013-08-13T09:39:02.737 回答
0

您可能想尝试 linq:

Enumerable.Range(0, (int)endDate.Subtract(startDate).TotalDays)
          .Select(d => startDate.AddDays(d))
          .ToList()
于 2013-08-13T09:43:26.883 回答
0

用这个

for (int i =0; i<(EndDate-StartDate).Days; i++)
        {
            datelist.Add(StartDate.AddDays(i));
        }
于 2013-08-13T09:43:33.127 回答
0

这确实是一个无限循环。您说如果开始日期小于结束日期,请将开始日期添加到列表中。它会一直这样做下去,因为开始日期应该总是(理论上)小于结束日期。添加天数函数未分配给变量,因此它永远不会添加到开始日期。

.Net datetime 的另一条建议是使用内置的比较功能。

日期时间比较功能

希望有帮助!

于 2013-08-13T09:40:00.340 回答
0

尝试这个:

private void CollectDates()
{
    DateTime StartDate = Convert.ToDateTime(txtFromDate.Text);
    DateTime EndDate = Convert.ToDateTime(txtTillDate.Text);
    List<DateTime> dateList = new List<DateTime>();

    DateTime currentDate = StartDate;

    while(currentDate <= EndDate)
    {
        dateList.Add(currentDate);
        currentDate.AddDays(1);
    }
}
于 2013-08-13T09:43:22.577 回答