【问题标题】:if else if in while loop were else if test is defined in the first cycleif else if 在 while 循环中是 else if 测试在第一个循环中定义
【发布时间】:2015-11-13 00:10:13
【问题描述】:

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

 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 次操作。由于这些操作的处理方式,我一次只能运行一次。

【问题讨论】:

    标签: c# datetime if-statement while-loop nullable


    【解决方案1】:

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

    【讨论】:

    • 嗯,这很快。这绝对有帮助!谢谢。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2015-10-28
    • 2020-08-14
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多