While循环使用单个变量进行多条件检查

时间:2019-05-07 17:49:10

标签: c# loops

我想知道是否有一种方法可以使用同一变量检查多个while循环条件。这有点含糊,但是此示例应将其清除:

while (myFunction(x) == 0 || myFunction(x) == 13639 || myFunction(x) == -4261.9583)
{ x++; }

是否有可能在检查三个条件时每个循环仅评估myFunction(x)一次,从而使该函数不必为相同的结果分别运行三个不同的时间?

我这样做是出于优化/效率的目的。 myFunction()可能是一个非常耗时的函数,所以我希望它运行所需的最少时间。

通常,我会在开始while循环之前定义myFunction(x)的值,但是在这种情况下,myFunction(x)的值将随着循环执行每次迭代而变化,因为x的值将在改变。

3 个答案:

答案 0 :(得分:4)

是的,可以这样做:

double result;
while ((result = myFunction(x)) == 0 || result == 13639 || result == -4261.9583)
{ x++; }

答案 1 :(得分:2)

三个选项:

向后做

检查结果列表,而不是对照列表检查结果。

var list = new float[] { 0F, 13639F, -4261.9583F );
while (list.Contains(myFunction(x))
{
    x++;
}

编写函数

将逻辑提取到另一个函数始终是解决问题的好方法。

bool IsValid(float input)
{
    var result = myFunction(input);
    return (result == 0 || result == 13639 || result == -4261.9583);
}

while (IsValid(x))
{ 
    x++;
}

使用while(true)

每当while循环的条件复杂时,通常的选择是从()中删除支票,然后将其放入{}中。执行此操作时,请使用while (true)

while (true)
{
    var result = myFunction(x);
    if (result != 0 && result != 13639 && result != -4261.9583) break;
    x++;
}

答案 2 :(得分:1)

您可以简单地通过将检查移到一个单独的方法中来执行此操作,该方法将函数的返回值作为参数,然后直接对该值执行3次检查并相应地返回布尔值。

假设该函数返回一个int类型的值,则该值可能看起来像这样:

bool CheckResultValue(int value) {
    return value == 0 || value == 13639 || value == -4261.9583;
}

然后您的while循环可能看起来像这样:

while (CheckResultValue(myFunction(x)))
{ x++; }