我的目标是循环通过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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您的for循环的迭代器部分:
for (DateTime day1 = DateTime.Parse(sDate); day1 <= DateTime.Parse(eDate); day1.AddDays(1))
Run Code Online (Sandbox Code Playgroud)
它应显示为day1 = day1.AddDays(1);:
for (DateTime day1 = DateTime.Parse(sDate); day1 <= DateTime.Parse(eDate); day1 = day1.AddDays(1))
Run Code Online (Sandbox Code Playgroud)
这是因为AddDays不修改现有DateTime对象;它返回的新实例DateTime。您需要将此分配回您的循环变量。相比之下,++i还是i++工作,因为他们实际上修改的值i。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |