【发布时间】:2011-08-10 05:16:50
【问题描述】:
我正在尝试将包含日期的列表 AAA 与日期范围进行比较。我想看看列表中是否存在任何日期范围。如果日期存在,我将列表项复制到另一个列表 BBB,否则我将空值添加到列表 BBB。
我遇到的问题是,对于我的实际代码,我不知道如何不通过 while 循环的错误语句,直到比较结束。
使用下面的代码,它在 while 循环中同时传递 true 和 false,这会伪造所需的结果。我得到的结果是每次出现的时候,我的时间都是假的。简而言之,假设列表包含日期 2010 年 6 月 5 日,日期范围是 2010 年 4 月 5 日到 2010 年 7 月 5 日。所以我将在真实部分创建一个项目,在错误部分创建一个项目,这是错误的。出现的日期可以是真或假的部分。不是两者都有,这样我就创建了两个项目!
我怎样才能获得正确的结果?请提供任何其他方法或建议。
我的代码如下:
DateTime StartDate;
DateTime EndDate;
Datetime tempDate = StartDate;
List<DateTime> dateToEvaluate;
bool TimeIsPresent = false;
foreach (var tempItem in TaskList)
{
while (EndDate.AddDays(1) != tempDate)
{
if (tempItem.Date[0] == tempDate)
{
TimeIsPresent = True;
break;
}
else
{
if (TimeIsPresent == False)
{
if (!(tempDate.DayOfWeek == DayOfWeek.Sunday)
{
dateToEvaluate = new List<DateTime>();
dateToEvaluate.Add(tempDate);
tempTask.Add(new GroupedTask { ID = null,
TaskID = null,
Date = dateToEvaluate });
}
}
}
tempDate = tempDate.AddDays(1);
}
if (TimeIsPresent == True)
{
tempTask.Add(new GroupedTask { ID = tempItem.ID,
TaskID = tempItem.TaskID,
Date = tempItem.Date });
TimeIsPresent = false;
}
}
让我举个例子。我的日期范围如下:8 月 8 日星期一至 8 月 14 日星期日。 现在我的任务列表如下:item1:Date 9Aug,item2:Date 11Aug。
所以我的 tempTask 必须如下: item1:日期 8 月 8 日,taskID:null,ID:null, item2:日期 8 月 9 日,taskID:678,ID:7, item3:日期 10Aug,taskID:null,ID:null, item4: Date11 Aug, taskID:890, ID: 34, item5:日期 8 月 12 日,taskID:null,ID:null, item6:日期 8 月 13 日,taskID:null,ID:null
第二个例子:
我的日期范围如下:8 月 8 日星期一 - 8 月 14 日星期日。 现在我的任务列表如下: item1:Date 9Aug,item2:Date 11Aug,item3:Date 14Aug
所以我的 tempTask 必须如下: item1:日期 8 月 8 日,taskID:null,ID:null, item2:日期 8 月 9 日,taskID:678,ID:7, item3:日期 10Aug,taskID:null,ID:null, item4: Date11 Aug, taskID:890, ID: 34, item5:日期 8 月 12 日,taskID:null,ID:null, item6:日期 8 月 13 日,taskID:null,ID:null, item4:Date14 Aug,taskID:894,ID:74,
【问题讨论】:
-
为什么不使用
bool表示TimeIsPresent,并将其设置为false? -
您知道,如果您将
TimeIsPresent定义为bool,则不需要在true和false周围加上引号——实际上,您可以使用if (TimeIsPresent)或if (!TimeIsPresent)代替。 -
EndDate是从哪里来的,为什么还要不断地重新计算EndDate.AddDays(1)? -
一开始我使用的是 bool TimeIsPresent,但由于它也不能正常工作,所以我将其更改为字符串。 EndDate 来自我用来比较的日期范围,所以我有开始日期和结束日期。
-
注意
while (EndDate.AddDays(1) != tempDate)不会改变EndDate的值。
标签: c#