我的目标是通过List<weatherForecast> weatherList
循环,看看它是否包含特定值。但是,每次我运行该程序时,它都会冻结。
通过注释掉循环的各个部分,似乎foreach loop
之外的所有东西都在起作用,但是我在程序的其他部分使用了foreach
几乎与此相同的语句,并且它们起作用很好。
Boolean flag;
for (DateTime day1 = DateTime.Parse(sDate); day1 <= DateTime.Parse(eDate); day1.AddDays(1))
{
flag = false;
foreach (WeatherForecast w in weatherList)
{
if (selected.Contains(w.City) && w.getDay().CompareTo(day1) == 0)
{
flag = true;
}
}
if (!flag)
{
day1 = DateTime.Parse(eDate).AddDays(1);
MessageBox.Show("Some of the dates in the range you selected do not have weather data. \nDefault data will be used,but you can enter the data manually.", "Missing Data", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
答案 0 :(得分:5)
问题是您的for循环的iterator部分:
for (DateTime day1 = DateTime.Parse(sDate); day1 <= DateTime.Parse(eDate); day1.AddDays(1))
它应显示为day1 = day1.AddDays(1);
:
for (DateTime day1 = DateTime.Parse(sDate); day1 <= DateTime.Parse(eDate); day1 = day1.AddDays(1))
这是因为AddDays
不会修改现有的DateTime
对象;它返回DateTime
的新实例。您需要将此分配回您的循环变量。相反,++i
或i++
起作用是因为它们实际上会修改i
的值。
答案 1 :(得分:1)
无限循环的直接原因是您没有修改 const routing = () => (
<Switch>
...
</Switch>
);
变量,应该将day1
分配回day1.Adddays(1)
:
day1
查询数据时(根据您的情况查找丢失的日期),请尝试使用专门为查询而设计的 Linq :
for (DateTime day1 = DateTime.Parse(sDate);
day1 <= DateTime.Parse(eDate);
day1 = day1.AddDays(1)) // <- assign day1.AddDays(1) back to day1
{
....
}