当从if返回时,是否存在使用else的起始区别,如果或只是跟随它?

时间:2016-04-11 22:05:28

标签: performance if-statement

我没有遇到任何问题,只是一个想法,我不知道。

假设您想要检查多种可能性,例如:

if(x > 1000)
{
    return 1000;
}
if(x > 990)
{
    return 1010;
}
if(x > 980)
{
    return 33;
}
if(x > 970)
{
    return 2;
}
if(x > 960)
{
    return null;
}

在那种情况下,我也可以使用else而不只是输入一个新的if,它会产生完全相同的效果。是否存在性能差异?如果有,那么“更正确”的方法是什么?

3 个答案:

答案 0 :(得分:3)

通常没有。在正常情况下如果不在每个语句中返回if / else if / else是否更好,因为在此构造中如果找到一个真实条件,则可以停止查看重新构造if块。

但在你的情况下,没有区别。

答案 1 :(得分:1)

关于性能,这可能会因编译器而异,但一般情况下应该没有区别。见这里的答案:

Performance difference of "if if" vs "if else if"

就哪个更正确而言,这完全取决于所涉及的意图和逻辑。在上面的例子中,只使用“if”(没有“else”)是完全正确的,因为每个条件都会提前退出,并且不存在歧义。但是,如果您的条件没有提前退出,那么x的单个值可以匹配多个条件。因此,正确性取决于每个条件中的逻辑是否应该复合,以便对于具有特定值的x,应该应用每个匹配条件中的所有逻辑。或者,是否只应运行一组逻辑以响应第一个条件(在这种情况下,您必须使用“else if”)。我从未遇到任何其他理由在“if”和“else if”之间进行选择,而不是意图以及每个条件是否明确且不重叠,或累积有效。

答案 2 :(得分:0)

我使用秒表类运行了一些测试代码,看起来其他ifs 稍微 比多个ifs更快。差异只是几个滴答的问题

private void button1_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
        sw.Start();
        Bar(1337);
        sw.Stop();

        Console.WriteLine("Else ifs: " + sw.ElapsedTicks);

        sw.Reset();
        sw.Start();
        Foo(1337);
        sw.Stop();

        Console.WriteLine("Multiple Ifs: " + sw.ElapsedTicks);
}

private bool Foo(int x)
    {
        if (x > 1000000)
            return true;

        if (x > 100000)
            return true;

        if (x > 10000)
            return true;

        if (x > 1000)
            return true;

        if (x > 100)
            return true;

        if (x > 10)
            return true;

        if (x > 1)
            return true;

        return false;
    }

    private bool Bar(int x)
    {
        if (x > 1000000)
            return true;
        else if (x > 100000)
            return true;
        else if (x > 10000)
            return true;
        else if (x > 1000)
            return true;
        else if (x > 100)
            return true;
        else if (x > 10)
            return true;
        else if (x > 1)
            return true;
        else
            return false;
    }

注意:C#.NET代码示例