关于c#:ifs,else ifs和多次返回

Ifs, else ifs and multiple returns

这不是一个关于被链接的国际单项体育联合会或国际单项体育联合会以及其他国际单项体育联合会的问题。我已经看到很多这样的问题了。

我的问题也不在于性能,而在于编码标准和可读性。

考虑一下在我工作的项目中我经常看到的以下简单的伪代码:

1
2
3
4
5
6
7
8
9
10
11
12
if (expression > 0)
{
    return 1;
}
else if (expression < 0)
{
    return -1;
}
else
{
    return 0;
}

我通常以稍微不同的方式编写这种结构:

1
2
3
4
5
6
7
8
9
10
11
if (expression > 0)
{
    return 1;
}

if (expression < 0)
{
    return -1;
}

return 0;

当然,还有第三种选择,即没有一个方法应该有一个以上的返回语句,当方法的复杂性较低时,我觉得这太限制和麻烦了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int retVal;

if (expression > 0)
{
    retVal = 1;
}
else if (expression < 0)
{
    retVal = -1;
}
else
{
    retVal = 0;
}

return retVal;

在编写这些类型的构造时,上面列出的选项之一是否更正确?从性能上讲,我知道选择完全不相关,但从可读性的角度来看,我更喜欢避免if-else if语句。也就是说,很多同事不同意我的观点,尽管他们不能给我任何令人信服的论据。


(P)有很多方法。你可以从你表演的两种方式中选一种You could do:(p)字母名称(P)Or fully use the third operator:(p)字母名称(P)5.Yet another option is to use a functional approach,such as offered by my own succint library and do:(p)字母名称(P)It's all a matter of preference and there are really isn't a right answer.(p)


(P)考虑(p)字母名称(P)总的来说,它对优先项目和周刊的依赖程度很高。(p)(P)如果所有三个案例(EDOCX1,英文本0,EDOCX1,英文本1,英文本DOCX1,英文本2)都有一些对白,它们是你的第一个选择,看的对我很好。(p)(P)如果Default Path应该返回EDOCX1的英文第3个字母,或是字母名称0,或是字母名称1,或是字母名称1的话,我会为第二个选项而去。(p)


(P)I think for(p)字母名称(P)This does not look performance wise correct and reason being every time it is doing condition matching.(p)(P)Rather in following case this will match till it finds correct condition and ignore rest(p)字母名称(P)I think if/else if/else is better over performanceFor readability perspective you can also prefer using案例I think performance wise if else is better choice than multiple IFS(p)


布尔奇1(P)你可以使用第三个运营者为简单的情况下和他们的案件,但如果你检查多个条件使用第三个运营者,这将是不允许的。(p)字母名称(P)For conditions having multiple checks use if and else-if as you have provided in your question.(p)字母名称(P)This answer has been updated after get remarks from@chris and@inbetween(p)