如何解决此for循环冻结我的程序

jor*_*ton 0 c# loops

我的目标是循环通过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)

Joh*_*ica 5

问题是您的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