0

2 つのテキスト ボックスと 1 つのボタンがあり、両方のテキスト ボックスにカレンダーが添付されています。リストの最初のテキストボックスと2番目のテキストボックスの間にある日付を保存したいので、ボタンのクリック時に次のメソッドを呼び出しています。

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

まさに無限ループです。開始日が終了日より前の場合は、リストに開始日を追加すると述べています。開始日は常に(理論的には)終了日よりも前でなければならないため、これを無限に続けます。add days 関数は変数に割り当てられていないため、開始日に追加されることはありません。

また、.Net datetime に関するもう 1 つのアドバイスは、組み込みの比較関数を使用することです。

日時比較関数

それが役立つことを願っています!

于 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 に答える
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 に答える