C# 在循环重复期间保持准确的条件

C# 在循环重复期间保持准确的条件,c#,C#,我在用一种方法计算暂停,它有一定的中断检查。计算时间的方法(从到),同时我要检查,如果时间小于30,让我报告错误 如果不重复循环,它将成功启动 如果条件正确,我能跳过那部分吗 在变量暂停时,我得到了我的值:6,56,4 这就是方法 private double CalculateBreak(List<PRAESENZZEIT> arrivals, out string error) { error = null; double totalBreak = 0;

我在用一种方法计算暂停,它有一定的中断检查。计算时间的方法(从到),同时我要检查,如果时间小于30,让我报告错误

如果不重复循环,它将成功启动

如果条件正确,我能跳过那部分吗

在变量暂停时,我得到了我的值:6,56,4

这就是方法

private double CalculateBreak(List<PRAESENZZEIT> arrivals, out string error)
{
    error = null;
    double totalBreak = 0;

    for (int i = 1; i < arrivals.Count();)
    {
        for (int n=i-1; n < arrivals.Count();)
        {
            double pause = (arrivals[i].ZPZ_Von - arrivals[n].ZPZ_Bis).TotalMinutes;
            //this part
            if (pause > 30) 
                error = "OK"; 
            else
                error = "error1";
            //end
            i += 1;
            totalBreak += pause;
            break;
        }
        if (totalBreak < 60)
        {
            error = "error2";
        }
    }
    return totalBreak;
}
private double CalculateBreak(列表到达,输出字符串错误)
{
错误=null;
双总断裂=0;
对于(int i=1;i30)
错误=“确定”;
其他的
error=“error1”;
//结束
i+=1;
totalBreak+=暂停;
打破
}
如果(总断裂<60)
{
error=“error2”;
}
}
返回全中断;
}
编辑:在注释中来回一些之后,需要进一步更改。如果这仍然不能满足你的要求,那么请打开另一个问题,集中在这一部分,因为我不知道你在说什么。原始答案中的代码被注释掉了。如果有错误,现在返回错误

你的循环是错误的。你只需要其中一个。forn循环将遍历所有到达的数据,而看起来您只需要查看前一个。试着这样做:

private double CalculateBreak(List<PRAESENZZEIT> arrivals, out string error)
{
    error = null;
    double totalBreak = 0;
    for (int i = 1; i < arrivals.Count();)
    {
        // Check the i-th against the previous one (i - 1)
        double pause = (arrivals[i].ZPZ_Von - arrivals[i - 1].ZPZ_Bis).TotalMinutes;
        // //this part
        // if (pause > 30) 
        //     error = "OK"; 
        // else
        if (pause < 30) // new
        {               // new
            error = "Pausenzeitverletzung";
        }               // new
        //end
        i += 1;
        totalBreak += pause;
        // break;
        // if (totalBreak < 60)
        // {
        //    error = "Pausenzeitverletzung";
        // }
    }
    // new: moved if block
    if (totalBreak < 60)
    {
        error = "Pausenzeitverletzung";
    }

    return totalBreak;
}
private double CalculateBreak(列表到达,输出字符串错误)
{
错误=null;
双总断裂=0;
对于(int i=1;i30)
//错误=“确定”;
//否则
如果(暂停<30)//新建
{//新
error=“Pausenzeitverletzung”;
}//新的
//结束
i+=1;
totalBreak+=暂停;
//中断;
//如果(总断裂<60)
// {
//error=“Pausenzeitverletzung”;
// }
}
//新:移动的if块
如果(总断裂<60)
{
error=“Pausenzeitverletzung”;
}
返回全中断;
}

您应该移动
error=“OK”到方法的顶部。如果有任何错误,您不应该在下一次迭代中用OK覆盖它(
error=null;
=>
error=“OK
)你比我早一点:)也许值得向OP提一提,
到达
列表被认为是正确排序的……正如你所说,该代码确实应该给你6,然后是56,然后是4。返回的总中断将是66。这可能不是你想要的,但你的代码将所有中断相加并忽略t有些是<30。你的下一个问题可能是计算totalBreak。(顺便说一句:仅仅说“不工作”并没有多大帮助。实际发生了什么?应该发生什么?我不知道你刚才说了什么。)此外,正如@BartHofland所说(:)它确实假设到达者被正确排序。好的。你想返回一个列表(6,56,4)以及它返回的其他两件事情?那么,添加代码。在函数的开始处放置一个断点并逐步完成。观察它在做什么。