if else if in while 循环 were else if test 在第一个循环中定义

if else if in while loop were else if test is defined in the first cycle

有点混乱,尤其是在尝试用标题描述时。这是一些示例代码。我希望这是可能的(我还没有找到方法。)

 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 次操作在不同的时间间隔进行一次操作。由于这些操作的处理方式,我一次不能超过一个 运行。

如果您使用的是可为 null 的日期时间,则可能根本不需要 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
    }
}