编程语言
首页 > 编程语言> > c#-如果else在while循环中则为else如果在第一个周期中定义了test

c#-如果else在while循环中则为else如果在第一个周期中定义了test

作者:互联网

有点令人困惑,尤其是在尝试描述标题时.这是一些示例代码.我希望这是可能的(我还没有找到一种方法来做.)

 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语句强制为true,之后每次通过都为false.我绝对愿意接受其他方法.

如果您感到好奇,那么我们的目标是在一项服务中运行该服务,该服务在不同的时间间隔一次运行11次操作.由于这些操作的处理方式,一次最多只能运行一次.

解决方法:

如果您使用的是可为空的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
    }
}

标签:while-loop,if-statement,nullable,datetime,c
来源: https://codeday.me/bug/20191119/2039316.html