If else If在while循环中If else If在第一个循环中定义了test

本文关键字:If 循环 else test 第一个 while 定义 | 更新日期: 2023-09-27 18:08:57

有点令人困惑,特别是当试图在标题中描述时。下面是一些示例代码。我希望这是可能的(我还没有找到一个方法来做到这一点。)

 DateTime startTime = DateTime.Now;
        int i = 0;
        bool running = true;
        while (running)
        {
            DateTime? lastRunTime = null;
            if (i == 0)
            {
                if ((DateTime.Now - startTime).Minutes >= Program.genTimer)
                {
                    i = 1;
                    lastRunTime = DateTime.Now;
                }
            }
            else if ((DateTime.Now - lastRunTime).Minutes >= Program.genTimer)
            {
                   //doestuff
            }

这可能看起来很愚蠢(这根本不起作用,显然是一个可空的时间跨度不包含'分钟'的定义。我也试过

DateTime lastRunTime;
不是

DateTime? lastRunTime = null;

所以基本上我强迫第一个if语句第一次为真,之后的每一次都为假。我绝对愿意接受不同的方法。

如果您很好奇,我们的目标是在一个服务中运行它,它在不同的时间间隔内一次运行11个操作。由于这些操作的处理方式,我一次只能运行一个。

If else If在while循环中If else If在第一个循环中定义了test

如果您使用的是一个可空的DateTime,那么您可能根本不需要i.HasValue将告诉您是否已设置。只有第一次才会是假的。同时把它移出while循环,否则每次都要重新声明它。

试试

DateTime startTime = DateTime.Now;
bool running = true;
DateTime? lastRunTime = null;
while (running)
{
    if (!lastRunTime.HasValue)
    {
        if ((DateTime.Now - startTime).Minutes >= Program.genTimer)
        {
            lastRunTime = DateTime.Now;
        }
    }
    else if ((DateTime.Now - lastRunTime.Value).Minutes >= Program.genTimer)
    {
            //doestuff
    }
}