我没有遇到任何问题,只是一个想法,我不知道。
假设您想要检查多种可能性,例如:
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,它会产生完全相同的效果。是否存在性能差异?如果有,那么“更正确”的方法是什么?
答案 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代码示例